Asp*_*pid 3 homescreen swipe ios swiftui
其中UIKit
有一个选项可以禁用“Home”系统从底部向上滑动(不是完全禁用,但滑动会忽略第一次,并且如果用户确实想要的话,将强制用户重复它)。setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
实际上做对了我所需要的。
但如何在 SwiftUI 中达到同样的效果呢?
我尝试在 SceneDelegate 中调用此方法,如下所示:
let window = UIWindow(windowScene: windowScene)
let uiKitView = UIHostingController(rootView: contentView)
uiKitView.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
window.rootViewController = uiKitView
Run Code Online (Sandbox Code Playgroud)
preferredScreenEdgesDeferringSystemGestures
但如果您不重写返回,它就不起作用.all
我无法重写以下计算属性UIHostingController
:
extension UIHostingController {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
Run Code Online (Sandbox Code Playgroud)
我收到警告:
泛型类的扩展不能包含“@objc”成员
有人知道如何实现这一目标吗?
现在 SwiftUI 通过修饰符自然地支持它defersSystemGestures
:
body: some View {
MainView()
.defersSystemGestures(on: .bottom) // << here !!
}
Run Code Online (Sandbox Code Playgroud)
只需在自定义托管控制器中覆盖它即可
class MyHostingController<Content: View>: UIHostingController<Content> {
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
return [.all];
}
}
Run Code Online (Sandbox Code Playgroud)
并将其用作根控制器
let window = UIWindow(windowScene: windowScene)
let controller = MyHostingController(rootView: contentView)
controller.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
window.rootViewController = controller
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1233 次 |
最近记录: |