I wish to display different icons on share sheet header. The default icon is app icon which is square with rounded rectangle. This looks good and as expected. However if I have a circular icon, then the icon shows up with white square background with circular icon on it.
When icons are round, I just wish to show circular icon without white square background. How can I achieve it?
Code which adds details for the header:
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.title = self.sheetTitle ?? ""
// Icon which gets displayed on share sheet header.
if let icon = UIImage(named: "user-profile") {
metadata.imageProvider = NSItemProvider(object: icon)
}
return metadata
}
Code for entire Share Sheet, if needed:
import SwiftUI
import UIKit
import LinkPresentation
class ShareSheet {
static let shared = ShareSheet()
typealias Callback = (_ activityType: UIActivity.ActivityType?, _ completed: Bool, _ returnedItems: [Any]?, _ error: Error?) -> Void
let applicationActivities: [UIActivity]? = nil
let excludedActivityTypes: [UIActivity.ActivityType]? = nil
func open(subject: String, content: String, sheetTitle: String? = nil, heaaderImage: UIImage? = nil, callback: Callback? = nil) {
let controller = UIActivityViewController(activityItems: [MessageWithSubject(subject: subject, message: content,
sheetTitle: sheetTitle, heaaderImage: heaaderImage)],
applicationActivities: applicationActivities)
controller.excludedActivityTypes = excludedActivityTypes
controller.completionWithItemsHandler = callback
UIWindow.getTopViewController()?.present(controller, animated: true, completion: nil)
}
}
class MessageWithSubject: NSObject, UIActivityItemSource {
let subject: String
let message: String
let sheetTitle: String?
let headerImage: UIImage?
init(subject: String, message: String, sheetTitle: String? = nil, heaaderImage: UIImage? = nil) {
self.subject = subject
self.message = message
self.sheetTitle = (sheetTitle?.isBlank ?? true) ? Bundle.main.applicationName : sheetTitle
self.headerImage = heaaderImage ?? Bundle.main.appIcon
super.init()
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return message
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
let activityTypeId = activityType?.rawValue ?? ""
// Include the subject at the beginning of the message string, for apps that don't ask for the subject string directly.
// This works around an issue where the Gmail app doesn't request the subject string itself.
// Also, include it for the Notes app, since it provides context to the link URL.
if (activityTypeId == "com.apple.mobilenotes.SharingExtension") || (activityTypeId == "com.google.Gmail.ShareExtension") {
let combined = subject + "nn" + message
return combined
}
return message
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return subject
}
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.title = self.sheetTitle ?? ""
if let icon = UIImage(named: "user-profile") {
metadata.imageProvider = NSItemProvider(object: icon)
}
return metadata
}
}
How icon looks with this code and my circular icon :
|
I want the icon to look circular like in Apple Maps i.e. without white square background: