【问题标题】:iOS 15 NavigationLink pop automatically if destination is created dynamically如果动态创建目的地,iOS 15 NavigationLink 会自动弹出
【发布时间】:2021-09-17 22:43:40
【问题描述】:

这只是 iOS 15 RC 上的问题。它在 iOS 14 上运行良好。

问题是如果我在 NavigationLink 上的目的地是动态创建的,如果我尝试通过 NavigationLink 推送视图,它会自动弹出。这是一个位代码sn-p

 NavigationLink(
     destination: (createSettingNavigationLink(name: nameAndImage[0])),
     label: {
         CellButton(title: nameAndImage[0], image: nameAndImage[1])
     }

func createSettingNavigationLink(name: String) -> some View {
        if name == "shop.Settings" {
            return ShopSettings()
        }
        if name == "shop.Goods" {
            return ShopGoodsManagementPage()
        }
        if name == "shop.Order" {
            return ShopOrderPage()
        }
        if name == "Customer Service" {
            return ServiceListPage(isStore: true)
        }
        if name == "shop.Performance" {
            return PerformanceManagementPage()
        }
        if name == "shop.Earnings" {
            return CommissionSummaryPage()
        }
        if name == "shop.Increase_sales" {
            return BCWebView(urlStr: Constants.increaseSalesGuide)
                    .navigationBarTitle(Text("Increase Sales Guide"), displayMode: .inline)
                    .navigationBarHidden(false)
            )
        }
        return EmptyView()
    }

)


顺便说一句,这里提到的方法SwiftUI Unexpectedly NavigationLink pops automatically 没有帮助。

【问题讨论】:

  • 只是一个提示——给createSettingNavigationLink一个some View返回类型,使用switch name { ... },然后你可以删除returns和AnyViews。
  • 拥有minimal reproducible example 会很有帮助。你在这里拥有的东西不会为其他人编译。
  • @LiangWang:为什么选择 AnyView?为什么不查看?为什么这么多如果?为什么不切换?或者为什么不是 dic?
  • 谢谢,我已经删除了 AnyView。但是,我的重点是为什么我的案例在 iOS 15 中不起作用(可以编译但行为不正确)
  • 我已经编写了一些类似于您的 sn-p 的测试代码,但无法复制您的问题(如果有兴趣,我可以显示测试代码)。使用 Xcode 13-beta(不是 Xcode 13-RC)在 ios-15 RC 上一切正常。也许您的问题与未显示的其他代码/上下文有关。

标签: swiftui ios15


【解决方案1】:

我的最终解决方案是将上述函数更改为 struct view。我认为这是有道理的,因为结构视图似乎保持状态,而函数是纯无状态的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多