SwiftUI navigationBarItems:设备旋转时出现“通过属性检测到循环”错误

Posted

技术标签:

【中文标题】SwiftUI navigationBarItems:设备旋转时出现“通过属性检测到循环”错误【英文标题】:SwiftUI navigationBarItems: 'cycle detected through attribute' error on device rotation 【发布时间】:2020-10-20 01:48:33 【问题描述】:

我在使用 Xcode 11.5 时收到非常奇怪的错误消息。启用设备旋转支持后,当应用程序以纵向模式启动并且模拟器的屏幕旋转时,我收到一堆错误消息,告诉我“=== AttributeGraph:通过属性 XY === 检测到循环。它只发生在模拟器上,只发生在 iPhone 上,而不是 iPad。此外,如果我删除“navigationBarItems”,则不会出现错误消息。此外,屏幕上的内容看起来不正常(再次仅在模拟器上)。如果我再次旋转,内容如预期。

struct ContentView: View 
    
    var body: some View 
        NavigationView 
            Text("SwiftUI")
                .navigationBarTitle("Welcome")
                .navigationBarItems(trailing:
                    Button("Help") 
                        print("Help tapped!")
                    
            )
        
    

【问题讨论】:

【参考方案1】:

适用于 Xcode 12 / ios 14。作为一种解决方法,您可以尝试对两个方向都使用堆栈导航样式

struct ContentView: View 

    var body: some View 
        NavigationView 
            Text("SwiftUI")
                .navigationBarTitle("Welcome")
                .navigationBarItems(trailing:
                    Button("Help") 
                        print("Help tapped!")
                    
            )
        .navigationViewStyle(StackNavigationViewStyle())    // << here !!
    

【讨论】:

谢谢!但是,即使使用 StackNavigationStyle,问题仍然存在。也许 Xcode 对我来说已经损坏了?

以上是关于SwiftUI navigationBarItems:设备旋转时出现“通过属性检测到循环”错误的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:当“navigationBarItems”修改列表时,“listRowInsets”无法按预期工作[重复]

你如何在swiftUI中禁用navigationBaritems

SwiftUI 模态演示仅在 navigationBarItems 中有效

SwiftUI 将 navigationBarItems 按钮与“消息”中的大 navigationBarTitle 对齐

SwiftUI 按钮点击区域不准确但在 navigationBarItems 中是正确的

如何使navigationBarTitle和navigationBarItem的重叠区域可点击 - SwiftUI