在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...