在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];
}
}
我得到警告:
泛型类的扩展不能包含'@objc'成员
有人知道如何达到目标吗?
最佳答案
只需在自定义托管控制器中覆盖它
class MyHostingController<Content: View>: UIHostingController<Content> {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
并用作根控制器
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/