It is well known that a trailing button on a SwiftUI navigation bar is hard to tap. Its tappable area seems to be covered by a trailing inset, making it not register taps correctly (its as if the trailing half of its tappable area is disabled). I wrote a minimum reproducible example to make it clearer.
struct ContentView: View {
var body: some View {
NavigationView {
Text("Hello, world!")
.navigationBarItems(
trailing:
Button(action: {
print("Tapped!")
}) {
Image(systemName: "plus")
}
)
}
.navigationViewStyle(
StackNavigationViewStyle()
)
}
}
Copy and paste this on a new Xcode project, run it on an iPhone (not a simulator, it works fine there), and try to tap the plus button, you'll see what I mean.
Anyone have a way to get around this? I've tried the usually suggested ones like .imageScale(.large), overlaying a rectangle, and using other types of view with a .onTapmethod, but they don't work.
Thanks!