#swift #swiftui #tabview
Вопрос:
Я новичок в SwiftUI, у меня есть приложение, которое воспроизводит некоторые аудиозаписи с URL-адресов в UIKit, и я обновляю его до SwiftUI
Я следую этому руководству, чтобы иметь нижнюю панель «now playing bar». https://itnext.io/add-a-now-playing-bar-with-swiftui-to-your-app-d515b03f05e3
Проблема в том, что моя панель находится ниже TabView, но я хочу, чтобы она была выше TabView
Я не знаю, как это решить. Может быть, учебник устарел из-за старой версии SwiftUI?
Это то, что я делаю:
import SwiftUI
@main
struct MyApp: App {
@State var playerOffset: CGFloat = 0
var body: some Scene {
WindowGroup {
TabView {
VideosView()
.tabItem { Image(systemName: "film").accentColor(.black)
Text("Videos")}
AudiosView()
.tabItem { Image(systemName: "headphones").accentColor(.black)
Text("Audios")}
}
NowPlayingBar(content: ListenNowView()).tag(0).tabItem { Label("Listen Now", systemImage: "play.circle.fill") }
}
}
}
struct Blur: UIViewRepresentable {
var style: UIBlurEffect.Style = .systemChromeMaterial
func makeUIView(context: Context) -> UIVisualEffectView {
return UIVisualEffectView(effect: UIBlurEffect(style: style))
}
func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
uiView.effect = UIBlurEffect(style: style)
}
}
struct NowPlayingBar<Content: View>: View {
var content: Content
@ViewBuilder var body: some View {
ZStack(alignment: .bottom) {
//content
ZStack {
Rectangle().foregroundColor(Color.white.opacity(0.0)).frame(width: UIScreen.main.bounds.size.width, height: 65).background(Blur())
HStack {
Button(action: {}) {
HStack {
Image("cover").resizable().frame(width: 45, height: 45).shadow(radius: 6, x: 0, y: 3).padding(.leading)
Text("Shake It Off").padding(.leading, 10)
Spacer()
}
}.buttonStyle(PlainButtonStyle())
Button(action: {}) {
Image(systemName: "play.fill").font(.title3)
}.buttonStyle(PlainButtonStyle()).padding(.horizontal)
Button(action: {}) {
Image(systemName: "forward.fill").font(.title3)
}.buttonStyle(PlainButtonStyle()).padding(.trailing, 30)
}
}
}
}
}
struct ListenNowView: View {
@State private var showMediaPlayer = false
var body: some View {
Button(action: {
self.showMediaPlayer.toggle()
}) {
HStack {
Image("Cover").resizable().frame(width: 45, height: 45).shadow(radius: 6, x: 0, y: 3).padding(.leading)
Text("Shake It Off").padding(.leading, 10)
Spacer()
}
}.buttonStyle(PlainButtonStyle()).fullScreenCover(isPresented: $showMediaPlayer) {
}
}
}