SwiftUI 中的 preferredScreenEdgesDeferringSystemGestures

preferredScreenEdgesDeferringSystemGestures in SwiftUI

UIKit 中有一个选项可以禁用 "Home" 系统从底部向上滑动(不是完全禁用,但是滑动会忽略第一次,如果用户真的想要它会强制重复它) . setNeedsUpdateOfScreenEdgesDeferringSystemGestures() 实际上做的正是我需要的。

但是我如何在 SwiftUI 中达到相同的效果?

我试过像这样在 SceneDelegate 中调用这个方法:

        let window = UIWindow(windowScene: windowScene)
        let uiKitView = UIHostingController(rootView: contentView)
        uiKitView.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
        window.rootViewController = uiKitView

但如果您不将 preferredScreenEdgesDeferringSystemGestures 覆盖为 return .all,它就不起作用 我无法覆盖 UIHostingController:

的计算 属性
extension UIHostingController {
    open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.all];
    }
}

我收到警告:

Extensions of generic classes cannot contain '@objc' members

有人知道如何达到那个目的吗?

只需在自定义托管控制器中覆盖它

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