在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