Музыка теперь воспроизводится над TabView в SwiftUI

#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) {
        
        }
    }
}