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/

10-10 09:16