【问题标题】:Dynamically hiding tabs in SwiftUI TabView - Tabs mixed up in More... overflow item在 SwiftUI TabView 中动态隐藏选项卡 - 选项卡在更多...溢出项中混合
【发布时间】:2021-04-13 22:06:57
【问题描述】:

当您在 SwiftUI TabView 中使用 if 语句来动态隐藏/显示选项卡时,SwiftUI 最终会混淆“更多...”溢出选项卡项中的内容。

TabView() {
    if someCondition {
        View1()
    }
    View2()
    // ... more views
}

重现步骤:查看https://github.com/ralfebert/SwiftUITabItemOverflowBug,使用隐藏选项卡的“显示月亮”切换。转到“更多...”溢出选项卡,然后选择“垃圾箱”。现在这将显示不正确的视图 - “烟雾”而不是“垃圾”:

似乎是一个 SwiftUI 错误 (FB9078171)。动态显示和隐藏选项卡时是否有解决方法来获得正确的行为?

【问题讨论】:

  • 您能否更新您的问题以包含所有相关信息,指向 Github 存储库的链接可能会过期。

标签: swiftui


【解决方案1】:

试试这个

TabView() {
    if someCondition {
        View1()
    }
    View2()
    // ... more views
}
.id(someCondition)          // << here !!

【讨论】:

  • 适用于示例;尽管这具有重置所有选项卡中的所有@State/@StateObjects 的副作用。
  • 为了避免重置,也许尝试让你的标签内容 EquatableViews?这是一个解释:swiftwithmajid.com/2020/01/22/…
  • 这有点用,但拖动/滑动端的动画就这样消失了(使用PageTabViewStyle