swiftui - NavigationBarTitle 导致 TabView 内出现错误

标签 swiftui

每当我将 NavigationView 嵌套在 TabView 中时,我就开始在控制台中收到错误消息,并收到以下错误。有解决办法吗?

struct ContentView: View {
    var body: some View {
        TabView{
            NavigationView{
                Text("Hello, world!")
            .padding()
                    .navigationBarTitle("Hello World")
            }
            .tag(0)
            .tabItem {
                Text("Main")
            }
        
            NavigationView{
                Text("Hello, world!")
                    .padding()
                }
            .tag(1)
            .tabItem {
                Text("Secondary")
            }
            
        }.edgesIgnoringSafeArea(.top)
        
        
    }
}

我的控制台输出以下错误:

    2021-03-26 14:14:59.294828-0600 Playground[39119:2828740] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x600001ae5fe0 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7fdded4274f0]-(6)-[_UIModernBarButton:0x7fdded428920'Hello World']   (active)>",
    "<NSLayoutConstraint:0x600001ae6030 'CB_Trailing_Trailing' _UIModernBarButton:0x7fdded428920'Hello World'.trailing <= _UIButtonBarButton:0x7fdded7079f0.trailing   (active)>",
    "<NSLayoutConstraint:0x600001ae0230 'UINav_static_button_horiz_position' _UIModernBarButton:0x7fdded4274f0.leading == UILayoutGuide:0x6000000df1e0'UIViewLayoutMarginsGuide'.leading   (active)>",
    "<NSLayoutConstraint:0x600001ae94f0 'UINavItemContentGuide-leading' H:[_UIButtonBarButton:0x7fdded7079f0]-(0)-[UILayoutGuide:0x6000000df100'UINavigationBarItemContentLayoutGuide']   (active)>",
    "<NSLayoutConstraint:0x600001aee800 'UINavItemContentGuide-trailing' UILayoutGuide:0x6000000df100'UINavigationBarItemContentLayoutGuide'.trailing == _UINavigationBarContentView:0x7fdded4253a0.trailing   (active)>",
    "<NSLayoutConstraint:0x600001ae9cc0 'UIView-Encapsulated-Layout-Width' _UINavigationBarContentView:0x7fdded4253a0.width == 0   (active)>",
    "<NSLayoutConstraint:0x600001aeebc0 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x6000000df1e0'UIViewLayoutMarginsGuide'](LTR)   (active, names: '|':_UINavigationBarContentView:0x7fdded4253a0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600001ae5fe0 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7fdded4274f0]-(6)-[_UIModernBarButton:0x7fdded428920'Hello World']   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

最佳答案

我在这里找到了答案:

SwiftUI NavigationView navigationBarTitle LayoutConstraints issue

我需要添加 .navigationViewStyle(StackNavigationViewStyle())

当我将代码更新为此时,错误消失了:

struct ContentView: View {
var body: some View {
    TabView{
        NavigationView{
            Text("Hello, world!")
        .padding()
                .navigationTitle("Hello World")
        }
        .navigationViewStyle(StackNavigationViewStyle())
        .tag(0)
        .tabItem {
            Text("Main")
        }
    
        NavigationView{
            Text("Hello, world!")
                .padding()
            }
        .tag(1)
        .tabItem {
            Text("Secondary")
        }
        
    }.edgesIgnoringSafeArea(.top)
    
    
}

}

关于swiftui - NavigationBarTitle 导致 TabView 内出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66823839/

相关文章:

SwiftUI:ListItem手势

ios - 在 SwiftUI Form 中填充 Section 背景

swift - 如何在 SwiftUI 之间切换屏幕

macos - 如何在 SwiftUI 中获取默认按钮颜色?

swiftUI 如何在键盘上设置搜索按钮

ios - 登录后SwiftUI LoginView不会消失

TextView 中的 SwiftUI 默认格式化程序?

ios - SwiftUI:向控件添加效果会禁用交互性

ios - 如何在 SwiftUI 中实现触发 switch case 的左或右 DragGesture() ?

list - SwiftUI - 在 ForEach 上使用 .refreshable 来增强拉动刷新体验