in 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”成员
有人知道如何实现这一目标吗?
更新 Xcode 14 / iOS 16
现在 SwiftUI 自然支持它defersSystemGestures
修饰符:
body: some View {
MainView()
.defersSystemGestures(on: .bottom) // << here !!
}
Original
只需在自定义托管控制器中覆盖它即可
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)