Here is my work around for UIKit
extension UIViewController {
@objc func configureAsPopoverWith(sender: Any?) {
self.modalPresentationStyle = .popover
var enableZoom: Bool = true
var source: Any? = sender
#if targetEnvironment(macCatalyst)
// PopOver with Zoom crashes for macOS 26
if #available(iOS 26.0, *), let view = (sender as? UIBarButtonItem)?.value(forKey: "view") as? UIView {
source = view
}
enableZoom = false
#endif
if let sourceView = source as? UIView {
self.popoverPresentationController?.sourceView = sourceView
self.popoverPresentationController?.sourceRect = sourceView.bounds
if #available(iOS 18.0, *), enableZoom {
self.preferredTransition = .zoom { _ in sourceView }
}
} else if let sourceItem = source as? UIBarButtonItem {
self.popoverPresentationController?.barButtonItem = sourceItem
}
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: