在 UIKit
有一个选项可以禁用“主页”系统从底部向上滑动(不是完全禁用,但第一次滑动会忽略,如果他真的想要它会强制用户重复它)。 setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
实际上做对了我需要的。
但是我如何在 SwiftUI 中达到同样的效果?
我尝试在 SceneDelegate 中调用此方法,如下所示:
let window = UIWindow(windowScene: windowScene)
let uiKitView = UIHostingController(rootView: contentView)
uiKitView.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
window.rootViewController = uiKitView
但如果你不覆盖
preferredScreenEdgesDeferringSystemGestures
它就不起作用返回 .all
我无法覆盖 UIHostingController
的这个计算属性:extension UIHostingController {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
我收到警告:
Extensions of generic classes cannot contain '@objc' members
有人知道如何达到吗?
最佳答案
只需在自定义托管 Controller 中覆盖它
class MyHostingController<Content: View>: UIHostingController<Content> {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
并将其用作根 Controller
let window = UIWindow(windowScene: windowScene)
let controller = MyHostingController(rootView: contentView)
controller.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
window.rootViewController = controller
关于ios - SwiftUI 中的 PreferredScreenEdgesDeferringSystemGestures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61217304/