问题描述
我正在尝试动态地向安全区域添加额外的填充。为了实现这一点,我编写了将 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 (将#修改为@)