ios - SwiftUI 中的 PreferredScreenEdgesDeferringSystemGestures

标签 ios swiftui swipe homescreen

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];
    }
}

我收到警告:

Extensions of generic classes cannot contain '@objc' members



有人知道如何达到吗?

最佳答案

只需在自定义托管 Controller 中覆盖它

class MyHostingController<Content: View>: UIHostingController<Content> {
    open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.all];
    }
}

并将其用作根 Controller
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/

相关文章:

ios - 容器 View Controller 中的 tableviewcontroller : programatically selecting uitableviewcell, 突出显示闪烁

ios - 清空 Firebase DatabaseReference 不会停止观察,这绝对正确吗?

ios - SwiftUI TabbedView 只显示第一个选项卡的内容

swiftui - 如何收到符合协议(protocol)的 ObservedObject 更改的通知

ios - 有没有办法在 View 中的多个 subview 上调用函数?

Android:图库 View 已被弃用?

javascript - 无法阻止被动事件监听器内的默认行为 - Swipebox Movie

ios - Swift:以 NSException 类型的未捕获异常终止

ios - Firebase 存储错误

c# - 用于解析驾驶执照信息的现有库?