I'm being faced with an issue when using SwiftUI's WebView
on iOS 26. In many websites, the top/bottom content is unaccessible due to being under the app's toolbars. It feels like the WebView
doesn't really understand the safe areas where it's being shown, because the content should start right below the navigation bar, and only when the user scrolls down, the content should move under the bar (but it's always reachable if the users scroll back up).
Here's a demo of the issue:
Here's a 'fix' by ensuring that the content of the WebView
never leaves its bounds
. But as you can see, it feels out of place on iOS 26 (would be fine on previous OS versions if you had a fully opaque toolbar):
Code:
struct ContentView: View {
var body: some View {
NavigationStack {
WebView(url: URL(string: "https://apple.com")).toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Top content covered, unaccessible.") {}
}
}
}
}
}
Does anyone know if there's a way to fix it using some sort of view modifier combination or it's just broken as-is?
Hello. This is expected behavior for the SwiftUI WebView. You may notice that the ScrollView operates in a similar manner. To work around this problem, here are some things you can try:
- In SwiftUI, they can use the safeAreaPadding(_:) modifier
- in your web content, use the safe-area-inset CSS properties (see Designing Websites for iPhone X for details).