我有一个简单的TabView:
TabView {
NavigationView {
VStack {
NavigationLink(destination: Text("Detail")) {
Text("Go to detail")
}
}
}
.tabItem { Text("First") }
.tag(0)
Text("Second View")
.tabItem { Text("Second") }
.tag(1)
}
Run Code Online (Sandbox Code Playgroud)
当我转到选项卡1上的详细信息视图时,切换到选项卡2,然后再切换回选项卡1,我假设将返回到详细信息视图(iOS中随处可见的基本UX)。而是重置为选项卡1的根视图。
由于SwiftUI并不希望立即提供支持,因此该如何解决呢?
我有一个带有2个标签的TabView,每个标签都包含一个NavigationView。TabBar导航到其他视图时,我需要隐藏。一种解决方案是将TabView一个NavigationView 的内部放置,但是我必须为每个NavigationView设置不同的属性。
TabView(selection: $selectedTab, content: {
NavigationView {
VStack {
NavigationLink(destination: Text("SecondView Tab1")) {
Text("Click")
}
}
}.tabItem {
Text("ONE")
}.tag(0)
NavigationView {
VStack {
NavigationLink(destination: Text("SecondView Tab2")) {
Text("Click")
}
}
}.tabItem {
Text("TWO")
}.tag(1)
})
Run Code Online (Sandbox Code Playgroud)
PS我正在使用Xcode 11 Beta 5
我正在使用 SwiftUI 开发 Swift 应用程序。
我有这样的设置,我将 TabView 放入 NavigationView 中,并在 tabView 上使用 navigationBarTitle。我这样做是因为如果我将 NavigationView 放入 TabView 中,当我转到 NavigationLink 时,我无法使 Tab 栏消失:目前看来对于 swiftUI 来说这是不可能的。
我的设置当前的问题是,由于我将 .navigationBarTitle 放在 TabView 上,因此当我更改选项卡视图时标题不会更改,并且由于某种原因无法重置子视图上的 .navigationBarTitle。
这是一个代码来解释我所说的:
内容视图:
NavigationView {
TabView {
SomeSubView().tabItem() { Text("SomeSubView") }
Text("dummy2").tabItem() { Text("dummy2") }
Text("dummy3").tabItem() { Text("dummy3") }
}.navigationBarTitle("hello")
}
Run Code Online (Sandbox Code Playgroud)
一些子视图:
List(somearray) { element in
NavigationLink(destination: elementDetails()) {
SomeRowView()
}
}
Run Code Online (Sandbox Code Playgroud)
这是预览(上面的代码不完全是我的代码,只是一个示例):
现在我想将 .navigationBarTitle 放入 SomeSubView() 中,如下所示:
List(somearray) { element in
NavigationLink(destination: elementDetails()) {
SomeRowView()
}
}.navigationBarTitle("title2")
Run Code Online (Sandbox Code Playgroud)
而不是为 …
我有一个 SwiftUI 应用程序,它将有一个浮动的播客播放器,类似于位于选项卡栏上方的 Apple Music 播放器,并在播放器运行时保留在所有选项卡和视图中。我还没有想出一个很好的方法来定位播放器,使其与标签栏齐平,因为标签栏的高度会根据设备而变化。我发现的主要问题是我必须如何将播放器放置在应用程序根视图中的叠加层或 ZStack 中,而不是在 TabView 本身中。由于我们无法自定义 TabView 布局的视图层次结构,因此无法在 TabBar 本身与其上方视图的内容之间注入视图。我的基本代码结构:
TabView(selection: $appState.selectedTab){
Home()
.tabItem {
VStack {
Image(systemName: "house")
Text("Home")
}
}
...
}.overlay(
VStack {
if(audioPlayer.isShowing) {
Spacer()
PlayerContainerView(player: audioPlayer.player)
.padding(.bottom, 58)
.transition(.moveAndFade)
}
})
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是 PlayerContainerView 的位置是硬编码的,填充为 58,以便清除 TabView。如果我可以检测到 TabView 的实际帧高度,我可以为给定的设备全局调整它,我会没事的。有人知道如何可靠地做到这一点吗?或者您知道我如何将 PlayerContainerView 放置在 TabView 本身中,以便在切换显示时它只会出现在 Home() 视图和 Tab Bar 之间?对于任何反馈,我们都表示感谢。