在您单击以在 iPad 上显示侧边栏之前,三列导航视图不会更新
Posted
技术标签:
【中文标题】在您单击以在 iPad 上显示侧边栏之前,三列导航视图不会更新【英文标题】:Three Column Navigation View does not update until you click to show the sidebar on iPad 【发布时间】:2021-09-28 20:49:51 【问题描述】:鉴于此观点:
struct ContentView: View
@State var link1Active: Bool = false
var body: some View
NavigationView
List
NavigationLink(destination: Text("Link1 Destination"), isActive: $link1Active)
Text("Click me 1")
NavigationLink(destination: Text("Link2 Destination"))
Text("Click me 2")
Text("View 1")
Text("View 2")
.onAppear
link1Active = true
print("in here!")
当应用在 iPad 上以横向模式启动时,我看到两列“View 1”和“View2”。
我希望在左栏中看到“Link 1 Destination”,但未显示。
但是,当我单击切换侧边栏按钮时,“视图 1”被替换。
这是 swiftui 中视图设置方式的问题吗?
【问题讨论】:
【参考方案1】:问题只是在调用.onAppear
时NavigationLink
不存在。 .onAppear
将link1Active
设置为true(我通过在.onAppear
中打印print()
语句中的值来验证这一点),但在主List
视图打开并显示在屏幕上之前,什么都没有使用它。我真的不认为这是一个真正的“修复”,但是您要显示目的地的唯一方法很简单,例如:
(!link1Active ? Text("View 1") : Text("Link1 Destination"))
由于这是一个可重现的最小示例,我不确定您的用例,但我认为您需要重新考虑如何展示您的视图。
【讨论】:
我的用例是 Mac 和 ios 的 3 列布局。与 Apple Mail 类似,侧边栏用于选择来源以填充第一列中的列表视图。这在 Mac 上运行良好,但在 iPad 上运行良好,因为默认情况下不显示侧边栏,用户只能看到一个空白视图。那么有没有更好的方式来显示视图呢? 这真的不足以让我提出任何明确的建议。对于 iPad,您只需要让初始视图成为显示数据的视图,而不是介于两者之间的其他视图。我不确定为什么需要空白视图。本质上,您正在显示一个视图,但您确实想显示另一个视图,因此当第一个视图出现时,您可以立即导航到要显示的第二个视图。我真的不明白您为什么要这样做,相反,只需省略第一个视图,并显示第二个。以上是关于在您单击以在 iPad 上显示侧边栏之前,三列导航视图不会更新的主要内容,如果未能解决你的问题,请参考以下文章
单击时使用 data-toggle="offcanvas" 关闭导航栏不起作用