.navigationTitle aways 创建自动布局约束冲突 [英] .navigationTitle aways creates an autolayout-constraint conflict
问题描述
环境: Xcode 版本 12.3 (12C33)
版本 12.3 (12C33)
Environment: Xcode Version 12.3 (12C33)
Version 12.3 (12C33)
我注意到 NavigationTitle 在更新到 Xcode 12.3 RC 后会破坏自动布局.
这是一个简单的示例(根据注释修改为现代语法):
I notice that the NavigationTitle breaks the autolayout after updating to Xcode 12.3 RC.
Here's a simple example (revised to modern syntax per comment):
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
VStack(alignment: .center, spacing: 10) {
Text("Hello, world!")
.padding()
}.navigationTitle(Text("Greetings World!"))
.navigationBarTitleDisplayMode(.inline)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
这是我在运行时得到的结果:
Here's what I get upon running this:
2020-12-09 11:42:19.994389-0800 UICheck[26092:799713] [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:0x60000170e1c0 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7feb5ac096e0]-(6)-[_UIModernBarButton:0x7feb5ac06db0'Greetings World!'] (active)>",
"<NSLayoutConstraint:0x60000170e210 'CB_Trailing_Trailing' _UIModernBarButton:0x7feb5ac06db0'Greetings World!'.trailing <= _UIButtonBarButton:0x7feb5ac066a0.trailing (active)>",
"<NSLayoutConstraint:0x60000170ef80 'UINav_static_button_horiz_position' _UIModernBarButton:0x7feb5ac096e0.leading == UILayoutGuide:0x600000d5db20'UIViewLayoutMarginsGuide'.leading (active)>",
"<NSLayoutConstraint:0x60000170efd0 'UINavItemContentGuide-leading' H:[_UIButtonBarButton:0x7feb5ac066a0]-(0)-[UILayoutGuide:0x600000d5da40'UINavigationBarItemContentLayoutGuide'] (active)>",
"<NSLayoutConstraint:0x60000170ae90 'UINavItemContentGuide-trailing' UILayoutGuide:0x600000d5da40'UINavigationBarItemContentLayoutGuide'.trailing == _UINavigationBarContentView:0x7feb5ae185f0.trailing (active)>",
"<NSLayoutConstraint:0x60000170f750 'UIView-Encapsulated-Layout-Width' _UINavigationBarContentView:0x7feb5ae185f0.width == 0 (active)>",
"<NSLayoutConstraint:0x60000170b250 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x600000d5db20'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UINavigationBarContentView:0x7feb5ae185f0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000170e1c0 'BIB_Trailing_CB_Leading' H:[_UIModernBarButton:0x7feb5ac096e0]-(6)-[_UIModernBarButton:0x7feb5ac06db0'Greetings 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.
这是问题的根源:
This is the source of the problem:
我怀疑这是另一个 Apple Bug.
由于我使用的是提供的 .navigationBarTitle 视图,我该如何解决这个问题?
I suspect this to be another Apple Bug.
Being that I'm using the supplied .navigationBarTitle view, how can I fix this?
推荐答案
已针对 Xcode 13 更新
为了解决 SwiftUI NavigationView 上的 LayoutConstraints 错误,使其符合此样式:
To solve the LayoutConstraints error on SwiftUI NavigationView, make it conform to this style:
.navigationViewStyle(StackNavigationViewStyle())
在 Xcode 12 上
.navigationViewStyle(StackNavigationViewStyle())
on Xcode 12
.navigationViewStyle(.stack)
在 Xcode 13 上
.navigationViewStyle(.stack)
on Xcode 13
struct ContentView: View {
var body: some View {
NavigationView {
VStack(alignment: .center, spacing: 10) {
Text("Hello world!")
.padding()
}
.navigationTitle("Greetings World!")
.navigationBarTitleDisplayMode(.inline)
}
.navigationViewStyle(.stack)
}
}
这篇关于.navigationTitle aways 创建自动布局约束冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!