# Handle safe area insets as asymmetric — never double one side > Safe areas and layout margins are asymmetric on iPhone Duo. Math that assumes the left inset equals the right inset produces visibly off-centre layout. Source: https://iphoneduosupport.com/checklist/asymmetric-safe-area-insets/ Severity: blocker Category: safe-area Applies to: all Symptom: Content sits off-centre, or is clipped on one edge only, on the inner display. Sources: https://developer.apple.com/videos/play/tech-talks/111461/ https://developer.apple.com/videos/play/tech-talks/111466/ Last verified: 2026-09-09 --- Apple calls this out directly: on iPhone Duo, **safe areas and layout margins are asymmetric**, and each side must be handled independently. ## Why it happens On every previous iPhone, the left and right safe area insets were mirror images. In portrait they were both zero; in landscape the notch produced an equal inset on each side. A shortcut like `bounds.width - insets.left * 2` was wrong in principle but right in practice, so it survived code review for years. iPhone Duo breaks the symmetry. The status bar and camera sit asymmetrically on the inner display, and the hinge introduces geometry that has no mirror. Doubling one inset now over- or under-counts by the difference between the two sides. ## The fix Inset the rectangle and read its width, rather than doing arithmetic on one side: ```swift // Before — assumes left and right insets are equal let width = view.bounds.width - view.safeAreaInsets.left * 2 // After — each side accounted for independently let width = view.bounds.inset(by: view.safeAreaInsets).width ``` The same rule applies when you position content: ```swift // Foreground, interactive content stays inside the safe area foreground.frame = view.bounds.inset(by: view.safeAreaInsets) ``` In SwiftUI the safe area is respected by default, so the common failure is code that opts out and then re-adds padding by hand. If you find `.ignoresSafeArea()` followed by manual `.padding()`, that padding is almost certainly a symmetric assumption in disguise. Read the real values instead: ```swift GeometryReader { proxy in let insets = proxy.safeAreaInsets // .leading and .trailing differ ContentView() .padding(.leading, insets.leading) .padding(.trailing, insets.trailing) } ``` For web views and CSS-based UI, the equivalent is to use `env(safe-area-inset-left)` and `env(safe-area-inset-right)` separately rather than applying one value to both sides. ## How to verify In the Duo simulator, rotate the device on the inner display and compare the visual gap on the left and right edges of your content. They will differ; what matters is that your content is not clipped and does not drift off-centre as you rotate and fold. --- Published by iPhone Duo Support (https://iphoneduosupport.com). Not affiliated with Apple Inc.