SwiftUI中的preferredScreenEdgesDeferringSystemGestures

问题描述 投票:1回答:1

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'成员

任何人都知道如何做到这一点?

ios swiftui swipe homescreen
1个回答
1
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.