The TabViewBottomAccessoryPlacement
value is read only.
And the behavior also depends on what you set tabBarMinimizeBehavior(_:)
Here's an example :
struct ContentView: View {
var body: some View {
TabView {
Tab("Home", systemImage: "house") {
DemoView(prefix: "Home")
}
Tab("Alerts", systemImage: "bell") {
DemoView(prefix: "Alerts")
}
TabSection("Categories") {
Tab("Climate", systemImage: "fan") {
DemoView(prefix: "Climate")
}
Tab("Lights", systemImage: "lightbulb") {
DemoView(prefix: "Lights")
}
}
}
.tabViewBottomAccessory { MusicPlaybackView() }
.tabBarMinimizeBehavior(.onScrollDown)
}
}
struct MusicPlaybackView: View {
@Environment(\.tabViewBottomAccessoryPlacement) var placement
var body: some View {
if placement == .inline { ControlsPlaybackView() }
else { SliderPlaybackView() }
}
}
struct ControlsPlaybackView: View {
var body: some View {
Text("Controls")
}
}
struct SliderPlaybackView: View {
@State private var progress: Double = 0.3
var body: some View {
Text("Slider")
}
}
struct DemoView: View {
let prefix: String
var body: some View {
List(0..<50, id: \.self) { i in
Text("\(prefix) Item #\(i+1)")
}
}
}