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
在 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