I’m seeing a layout regression in SwiftUI on iPadOS 26.4 involving NavigationSplitView inside a TabView.
When a NavigationSplitView is embedded in a TabView, the sidebar toolbar appears to reserve too much vertical space.
There is a large vertical gap between the top edge of the sidebar and the sidebar collapse/toggle icon. It looks as if the sidebar toolbar itself has become much taller than expected.
The same NavigationSplitView layout is rendered correctly when it is shown directly without being embedded in a TabView.
Environment:
- iPadOS 26.4 or later
- SwiftUI
- iPad
- TabView
- NavigationSplitView inside one tab
Expected behavior
The sidebar toolbar should use its normal height, as it does when the same NavigationSplitView is shown without a surrounding TabView. The sidebar collapse/toggle icon should appear close to the top of the sidebar, without a large empty gap above it.
Actual behavior
When the NavigationSplitView is hosted inside a TabView, the sidebar toolbar area becomes excessively tall. A large empty space appears above the sidebar collapse/toggle icon. This only happens in the TabView setup. Rendering the same NavigationSplitView directly does not show the issue.
Feedback
I also filed this as Feedback Assistant report: FB22645938 Has anyone else seen this behavior since iPadOS 26.4? Is this an intentional layout change, or is there a supported way to avoid this additional top inset when using NavigationSplitView inside TabView?
Reproduction
import SwiftUI
struct ContentView: View {
enum AppTab {
case first
case second
}
@State private var selectedTab: AppTab = .first
var body: some View {
TabView(selection: $selectedTab) {
Tab("First", systemImage: "sidebar.leading", value: .first) {
NavigationSplitView {
List {
Section("Sidebar Content") {
ForEach(1...20, id: \.self) { index in
Text("Item \(index)")
}
}
}
.navigationTitle("Sidebar")
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button {
// action
} label: {
Image(systemName: "plus")
}
}
}
} detail: {
Text("Detail")
}
}
Tab("Second", systemImage: "doc", value: .second) {
Text("Second tab")
}
}
}
}