I have these swiftUI views and trying to use the toolbar
(bottomBar). When you launch the app it appears fine, but after going to View2
using he navigationLink and then go back to the main view the toolbar disappears. It happens when the NavigationLink being inside the list. If you don't use a list (put the navigation link inside a VStack or similar) it works as expected and the toolbar reappears when you go back to the initial view. Is there a way to fix this?
import SwiftUI
struct View2: View {
var body: some View {
VStack{
Text("View2")
}
}
}
struct ContentView: View {
var body: some View {
NavigationView{
List{
NavigationLink(destination: View2()) {
Text("go to View2")
}
}
.toolbar(content: {
ToolbarItem(placement: .bottomBar, content: {
Text("toolbar item 1")
})
})
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
One of those missing features in the first release was the toolbar; the control we all know from UIKit that allows to place navigation and action buttons at the top or the bottom of a view. That absence lasted for almost a year though, as toolbar has become natively available in SwiftUI starting with iOS 14.
Usually, SwiftUI places this item in the navigation bar on iOS or on top of other views on watchOS. There are placement options that we can use only in toolbars presented by a modal view. confirmationAction - The item represents a confirmation action for a modal interface.
That’s why SwiftUI provides us another type called ToolbarItemGroup. ToolbarItemGroup allows us to fix toolbar items in the specific placement. Let’s take a look at a very quick example. Today we learned how to use the new Toolbar API to present actions in our apps in a unified way on different platforms.
Toolbar API is another excellent addition to SwiftUI this year. Usually, we use toolbars to provide available actions. Did you remember the case where you have a button outside of the navigation bar or bottom bar?
This is known bug. Here is possible workaround - force refresh on View2 disappeared (tested with Xcode 12.1 / iOS 14.1)
struct ContentView: View {
@State private var refresh = UUID()
var body: some View {
NavigationView{
List{
NavigationLink(destination:
View2().onDisappear { refresh = UUID() }) { // << here !!
Text("go to View2")
}
}
.toolbar(content: {
ToolbarItem(placement: .bottomBar, content: {
Text("toolbar item 1")
})
}).id(refresh) // << here !!
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
This way is simpler and will help some people.
.toolbar {
ToolbarItem(id: UUID().uuidString, placement: .bottomBar, showsByDefault: true) {
AssetToolbarView(selectedCount: 0)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With