SwiftUI 中的 preferredScreenEdgesDeferringSystemGestures [英] preferredScreenEdgesDeferringSystemGestures in SwiftUI
问题描述
在UIKit
中有一个选项可以禁用Home"系统从底部向上滑动(不是完全禁用,但滑动会忽略第一次,如果他真的想要它会强制用户重复它).setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
实际上正是我所需要的.
in UIKit
there is an option to disable "Home" system swipe up from bottom (not completely disable, but swipe ignores first time and will force user to repeat it if he really wants it). setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
actually does right what I need.
但是我如何在 SwiftUI 中达到同样的效果?
But how do I reach the same in SwiftUI?
我尝试在 SceneDelegate 中像这样调用这个方法:
I tried to call this method in SceneDelegate like this:
let window = UIWindow(windowScene: windowScene)
let uiKitView = UIHostingController(rootView: contentView)
uiKitView.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
window.rootViewController = uiKitView
但如果您不覆盖 preferredScreenEdgesDeferringSystemGestures
以返回 .all
,则它不起作用我无法覆盖 UIHostingController
的这个计算属性:
but its doesn't work if you doesn't override preferredScreenEdgesDeferringSystemGestures
to return .all
I can't override this computed property of UIHostingController
:
extension UIHostingController {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
我收到警告:
泛型类的扩展不能包含'@objc'成员
Extensions of generic classes cannot contain '@objc' members
有人知道如何到达吗?
推荐答案
只需在自定义主机控制器中覆盖它
Just override it in custom hosting controllers
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
这篇关于SwiftUI 中的 preferredScreenEdgesDeferringSystemGestures的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!