【发布时间】:2021-08-01 02:11:03
【问题描述】:
我想导航到禁用系统边缘手势的自定义 UIView。我正在使用带有 UIViewControllerRepresentable 的 SwiftUI 生命周期并覆盖 PreferredScreenEdgesDeferringSystemGestures。
我已经看到了 SceneDelegate 的解决方案。 preferredScreenEdgesDeferringSystemGestures 是否必须作用于 window.rootViewController 才能工作?
class MyUIViewController: UIViewController {
typealias UIViewControllerType = MyUIViewController
open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return [.all];
}
let labelDescription: UILabel = {
let label = UILabel()
label.text = "But it's not working."
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(labelDescription)
labelDescription.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
}
}
struct UIViewControllerRepresentation : UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> some UIViewController {
let uiViewController = MyUIViewController()
return uiViewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("To UIView with no system edge gestures.",
destination: UIViewControllerRepresentation())
.navigationTitle("Title")
}
}
}
【问题讨论】:
标签: ios swift gesture uiviewcontrollerrepresentable