【问题标题】:Weird toolbar with nested conditionals behavior带有嵌套条件行为的奇怪工具栏
【发布时间】:2021-08-21 01:16:06
【问题描述】:

我遇到了一个非常奇怪的问题,如果你有一个很深的 ViewBuilder 和 if 语句链,连同一个工具栏,工具栏中的某些项目会重复。

这是一张图片来说明我的意思(注意 2 个“按我!”按钮)

复现:(注意:我使用的是 macOS Monterey Beta 5 和 Xcode 13 Beta 5)

  1. 新建一个空白的 SwiftUI macOS 项目
  2. 将此代码粘贴到ContentView
struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Sidebar")
            SecondPanel()
        }
    }
}
struct SecondPanel: View {
    @State var num = 0
    
    @ViewBuilder var content: some View {
        Text("Line 2")
        Text("Line 3")
    }
    @ViewBuilder var contentWithToolbar: some View {
        content
            .toolbar {
                Button(action: {
                    num += 1
                }) {
                    Text("Press me!")
                }
            }
    }
    var body: some View {
        if num == 0 {
            contentWithToolbar
                .navigationSubtitle("Num is zero!")
        }
        else {
            contentWithToolbar
        }
    }
}
  1. 运行应用程序。你应该看到两个“按我!”按钮,即使我只有一个工具栏按钮!

我想知道这是怎么回事,有什么办法可以解决这个问题吗?

【问题讨论】:

  • 尝试从按钮中删除视图构建器注释。如果我在创建视图时执行条件逻辑,我通常会使用它。既然你不是,没有注释应该没问题
  • @Jake 我试过删除它,但似乎没有帮助
  • 好的……如何将内容视图构建器的内容包装在 A vstack 中?
  • @Jake 这似乎解决了问题,但最初我有一堆条件(因此是 ViewBuilder)
  • 请不要编辑您的问题来宣布它已解决。这就是答案的用途。而且您已经发布了答案(这很棒!)。我相应地回滚了你的编辑。

标签: swift macos swiftui


【解决方案1】:

@Jake 指出问题是由于堆叠的 2 个 Text 对象没有 VStack 造成的。

添加VStack 完全解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多