我有一个 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 之间?对于任何反馈,我们都表示感谢。