This is maybe related to the new (12.3) version of XCode that came out recently but I have a very simple SwiftUI View:
import SwiftUI struct HomeView: View { var body: some View { NavigationView { Text("Text") .navigationBarTitle("My Title") } } }
And I'm getting this warning in the console:
2020-12-15 18:25:06.506062-0800 Shopmatic[46177:9585655] [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:0x600003636d00 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7faf15d0dc30]-(6)-[_UIModernBarButton:0x7faf15c17500'Your Lists'] (active)>", "<NSLayoutConstraint:0x600003636d50 'CB_Trailing_Trailing' _UIModernBarButton:0x7faf15c17500'Your Lists'.trailing <= _UIButtonBarButton:0x7faf15c16140.trailing (active)>", "<NSLayoutConstraint:0x600003631e50 'UINav_static_button_horiz_position' _UIModernBarButton:0x7faf15d0dc30.leading == UILayoutGuide:0x600002c18ee0'UIViewLayoutMarginsGuide'.leading (active)>", "<NSLayoutConstraint:0x600003631ea0 'UINavItemContentGuide-leading' H:[_UIButtonBarButton:0x7faf15c16140]-(0)-[UILayoutGuide:0x600002c18e00'UINavigationBarItemContentLayoutGuide'] (active)>", "<NSLayoutConstraint:0x600003617160 'UINavItemContentGuide-trailing' UILayoutGuide:0x600002c18e00'UINavigationBarItemContentLayoutGuide'.trailing == _UINavigationBarContentView:0x7faf15e10000.trailing (active)>", "<NSLayoutConstraint:0x600003632580 'UIView-Encapsulated-Layout-Width' _UINavigationBarContentView:0x7faf15e10000.width == 0 (active)>", "<NSLayoutConstraint:0x600003617520 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x600002c18ee0'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UINavigationBarContentView:0x7faf15e10000 )>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x600003636d00 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7faf15d0dc30]-(6)-[_UIModernBarButton:0x7faf15c17500'Your Lists'] (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.
This simple example looks fine but when I do something a bit more complex:
import SwiftUI struct ListDetailView: View { var list: List var body: some View { NavigationView { Text("Detail View") .navigationBarTitle("Detail View Title") .navigationBarTitleDisplayMode(.large) .navigationBarItems( trailing: Button(action: { print("Button Pressed") }) { Image(systemName: "ellipsis") } ) } } }
The Navigation Title areas layout is all screwed up:
The . navigationBarBackButtonHidden(true) will hide the back button.
SwiftUI's NavigationLink has a second initializer that has an isActive parameter, allowing us to read or write whether the navigation link is currently active. In practical terms, this means we can programmatically trigger the activation of a navigation link by setting whatever state it's watching to true.
It had nothing to do with NavigationBarTitle
. .navigationTitle
is not deprecated. Seems whole issue is mainly with new Xcode 12.4 update, even for simple code:
var body: some View { NavigationView{ Text("Hopefully will work this time") .navigationTitle("Error with constains") } }
adding .navigationViewStyle(StackNavigationViewStyle())
fixes problem
var body: some View { NavigationView{ Text("Yes it does!") .navigationTitle("Wow it works") } }.navigationViewStyle(StackNavigationViewStyle())
PS. My first stackoverflow reply xD
NavigationBarTitle
is deprecated from iOS 14.3
. However if you still wish to use it, try to add .navigationViewStyle(StackNavigationViewStyle())
on the navigationView
that will fix the warning.
struct ContentView: View { var body: some View { NavigationView { VStack { Text("Hello, world!") .padding() Spacer() } .navigationBarTitle("Hey there", displayMode: .inline) } .navigationViewStyle(StackNavigationViewStyle()) } }
The new way:
.navigationBarTitleDisplayMode(.inline) .toolbar(content: { ToolbarItem(placement: .principal, content: { Text("Title") })})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With