【发布时间】:2020-01-29 15:03:11
【问题描述】:
我有一个 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)
}
})
这里的主要问题是 PlayerContainerView 的位置是硬编码的,填充为 58,以便清除 TabView。如果我可以检测到 TabView 的实际帧高度,我可以针对给定的设备全局调整它,我会没事的。有谁知道如何可靠地做到这一点?或者您是否知道如何将 PlayerContainerView 放置在 TabView 本身中,以便在切换显示时它仅显示在 Home() 视图和 Tab Bar 之间?任何反馈将不胜感激。
【问题讨论】:
-
你试过 GeometryReader 了吗?
-
是的,但我不知道如何定位 TabView...或者至少我无法找到一个相关的高度值,该值实际上对应于该特定标签栏的绘制高度设备。
-
@eResourcesInc 我试过了,你可以在我的回答中看到它是如何工作的......
标签: swift xcode swiftui ios13 xcode11