У меня есть приложение SwiftUI, в котором будет проигрыватель подкастов, похожий на проигрыватель Apple Musi c, который расположен чуть выше панели вкладок и сохраняется во всех вкладках и представлениях во время работы проигрывателя. Я не нашел хорошего способа расположить плеер так, чтобы он был flu sh над панелью вкладок, поскольку высота панели вкладок изменяется в зависимости от устройства. Основная проблема, которую я обнаружил, заключается в том, как мне разместить проигрыватель в оверлее или ZStack в представлении root моего приложения, а не в самом TabView. Поскольку мы не можем настроить иерархию представления макета TabView, нет способа внедрить представление между самой TabBar и содержимым представления над ним. Моя базовая c структура кода:
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 () и панелью вкладок, когда его переключали для отображения? Любые отзывы будут оценены.