如何解决在 SwiftUI 中设置额外的安全区域插图
我正在尝试动态地向安全区域添加额外的填充。为了实现这一点,我编写了将 SwiftUI 视图包装到 NodeList
中并在其上设置 UIHostingController
的修饰符:
additionalSafeAreaInsets
这在涉及复杂导航之前效果很好:
extension View {
func extendSafeArea() -> some View {
modifier(ExtendedSafeAreaModifier())
}
}
struct ExtendedSafeAreaModifier: ViewModifier {
func body(content: Content) -> some View {
Container(content: content)
.edgesIgnoringSafeArea(.all)
}
private struct Container: UIViewRepresentable {
let content: Content
typealias UIViewType = UIView
func makeUIView(context: Context) -> UIViewType {
let hostingController = UIHostingController(rootView: content)
hostingController.additionalSafeAreaInsets = .init(top: 0,left: 0,bottom: 200,right: 0)
context.coordinator.container = hostingController
return hostingController.view
}
func updateUIView(_ uiView: UIViewType,context: Context) {
uiView.setNeedsLayout()
}
func makeCoordinator() -> Coordinator {
.init()
}
class Coordinator {
var container: UIViewController!
}
}
}
在上面的示例中,更改标签使 struct ContentView: View {
@State var tab: Int = 0
var body: some View {
TabView(selection: $tab) {
NavigationView {
ZStack {
Rectangle()
.foregroundColor(.red)
NavigationLink(
"B",destination: Rectangle()
.foregroundColor(.blue)
.navigationBarTitle("B",displayMode: .inline)
.navigationBarHidden(false)
)
}
.navigationBarHidden(true)
.navigationBarTitle("",displayMode: .inline)
}
.extendSafeArea()
.tag(0)
.tabItem {
Text("A")
}
Text("C")
.tag(1)
.tabItem {
Text("C")
}
}
}
}
完全损坏:
Broken navigation
这种行为可以解决吗?是否有另一种方法来实现扩展安全区域? 谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。