본문 바로가기
SwiftUI

[SwiftUI] navigationBarTitle LayoutConstraints error

by 고고 2021. 11. 6.

안녕하세요 ◠‿◠ 고고입니다.

Xcode를 업데이트하고나니 아래같이 네비게이션뷰에 타이틀을 지정하면 레이아웃 경고가 콘솔에 뜨더군요.

import SwiftUI

struct HomeView: View {
    var body: some View {
        NavigationView {
            Text("Text")
                .navigationBarTitle("My Title")
        }
    }
}

 

2021-11-06 15:58:37.451585+0900 Daily Bible[17299:601787] [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:0x6000029287d0 'BIB_Leading_Leading' H:|-(0)-[_UIModernBarButton:0x7fb856a90f70]   (active, names: '|':_UIButtonBarButton:0x7fb854f8d640 )>",
    "<NSLayoutConstraint:0x600002922850 'UINav_static_button_horiz_position' _UIModernBarButton:0x7fb856a90f70.leading == UILayoutGuide:0x6000033f9c00'UIViewLayoutMarginsGuide'.leading   (active)>",
    "<NSLayoutConstraint:0x600002922800 'UINavItemContentGuide-leading' H:[_UIButtonBarButton:0x7fb854f8d640]-(6)-[UILayoutGuide:0x6000033f9420'UINavigationBarItemContentLayoutGuide']   (active)>",
    "<NSLayoutConstraint:0x60000290b430 'UINavItemContentGuide-trailing' UILayoutGuide:0x6000033f9420'UINavigationBarItemContentLayoutGuide'.trailing == _UINavigationBarContentView:0x7fb854f8c9f0.trailing   (active)>",
    "<NSLayoutConstraint:0x600002920c30 'UIView-Encapsulated-Layout-Width' _UINavigationBarContentView:0x7fb854f8c9f0.width == 0   (active)>",
    "<NSLayoutConstraint:0x60000290b7f0 'UIView-leftMargin-guide-constraint' H:|-(8)-[UILayoutGuide:0x6000033f9c00'UIViewLayoutMarginsGuide'](LTR)   (active, names: '|':_UINavigationBarContentView:0x7fb854f8c9f0 )>"
)

 

해결 방법은 아래 코드처럼 .navigationViewStyle(StackNavigationViewStyle()) 를 추가해주시면 됩니다.

import SwiftUI

struct HomeView: View {
    var body: some View {
        NavigationView {
            Text("Text")
                .navigationBarTitle("My Title")
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

하지만 StackNavigationViewStyle() 아이패드에서 사이드바 없이 한 화면밖에 표시되지 않으니 주의하세요.

 

 

+) 위 코드는 iOS 13 기준의 코드입니다.

navigationBarTitle는 iOS 14.0부터 더 이상 사용되지 않습니다.

iOS 14 이상부터 지원하신다면 navigationTitle 또는 navigationBarTitleDisplayMode 함수를 사용하세요. 👍

 

또한 Xcode 13 이상 시 

.navigationViewStyle(StackNavigationViewStyle())

.navigationViewStyle(.stack)

이렇게 사용할 수 있습니다.

댓글