[英]SwiftUI bug with navigation view rotation?
在测试我的应用程序以确保它在屏幕旋转下正常运行时,我发现导航链接在特定旋转序列后不起作用。
以下是 MWE:
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("link") {
Text("hi")
}
}
}
// rotate -> back -> link -> rotate -> back -> link
}
在 iPhone 13 Pro Max (iOS 15.2 (19C51)) 模拟器上,以下导致错误:
back
按钮(在导航栏中)link
back
按钮link
不起作用!此外,调试控制台打印:
Unbalanced calls to begin/end appearance transitions for <_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentGS1_VVS_22_VariadicView_Children7ElementVS_24NavigationColumnModifier_GVS_18StyleContextWriterVS_19SidebarStyleContext___: 0x152f24860>.
这是 SwiftUI 中的错误吗? 有没有办法解决这个问题?
我在 macOS Monterey (12.2 (21D49)) + Xcode 13.2.1 (13C100) 上。
将 ColumnNavigationViewStyle 更改为 StackNavigationViewStyle 将解决您的问题,您提到的序列很可能是一个错误,希望苹果会尽快解决它。
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("link") {
Text("hi")
}
}
.navigationViewStyle(.stack) //Style
}
}
无需放弃 iPadOS 中的双列布局,我使用以下条件视图构建器根据水平尺寸 class 使用不同的导航样式。
(虽然条件视图构建器通常不能很好地处理动画,但在这里使用它似乎还可以。)
extension View {
@ViewBuilder func `if`<TrueContent: View>(
_ condition: Bool,
then trueContent: (Self) -> TrueContent
) -> some View {
if condition {
trueContent(self)
} else {
self
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("link") {
Text("hi")
}
}
.if(UIDevice.current.userInterfaceIdiom == .phone) {
$0.navigationViewStyle(.stack)
}
}
}
PS 当场景在每次旋转后适当调整大小时,该问题也可以在 iPadOS 中重现,但我认为在无意重现的情况下这种情况不太可能发生。
最大值使用横向列,而您缺少第二列视图。 尝试这个
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("link") {
Text("hi")
}
Text("Select a link")
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.