Navigation & Safe areas

Do custom bottom tab bars require special ReserveRegion insets or does the system handle tab shifting automatically?

If you use a regular SwiftUI TabView, the system handles the tab bar's position and adapts it across iPhone Duo's different poses. A custom bar doesn't automatically turn into the system's side tab bar when the device folds. safeAreaInset helps keep your content clear of the usual safe areas, but the fold is a separate reserved region.

For a custom bar, check the reserved regions that intersect its layout and move the bar or its buttons when they would land under the hinge or camera. In SwiftUI, Apple shows querying these with GeometryProxy.reservedRegions(kind:), including .division for the fold. You may also need to check .occlusion for areas covered by hardware. The system's standard components already handle these areas.

Apple's guide: https://developer.apple.com/design/human-interface-guidelines/designing-for-iphone-duo
SwiftUI reserved region API: https://developer.apple.com/documentation/swiftui/geometryproxy

Thanks for this great question.

The easiest way to "reserve a region" for a custom tab bar is to use the .safeAreaInset modifier. Instead of layering your tab bar in a ZStack over your content in my personal opinion.

GeometryReader { safe in
            let insets = safe.safeAreaInsets

If you use the native TabView in SwiftUI or UITabBarController for UIKit, the system handles all insets and shifting natively. But the moment you go custom, you must use .safeAreaInset(edge: .bottom).

Hope this helps.

Albert  WWDR