SwiftUI带PageTabViewStyle的TabView在带安全区设备横屏时前导边异常缩进
问题原因
这是SwiftUI PageTabViewStyle 存在的系统已知bug:带安全区的iOS设备横屏时,系统会错误给TabView滚动内容添加前导安全区偏移,即使显式设置edgesIgnoringSafeArea(.all)也无法生效。无安全区设备、竖屏场景都不会触发该问题。
修复方案
iOS 15+ 最简修复
给TabView添加contentMargins修饰符手动重置滚动内容的水平边距即可:
struct ContentView: View { var body: some View { TabView { Color.red .edgesIgnoringSafeArea(.all) } .tabViewStyle(PageTabViewStyle()) // 新增这一行即可修复缩进问题 .contentMargins(.horizontal, 0, for: .scrollContent) .edgesIgnoringSafeArea(.all) } }
兼容iOS 14及更低版本方案
如果需要兼容旧版本系统,可以选择两种方案:
- 全局修改UIScrollView行为:在App入口的初始化方法中添加以下代码,注意该修改会影响全局所有ScrollView的内边距调整逻辑,如果其他页面有依赖系统自动调整的ScrollView需要单独适配:
init() { UIScrollView.appearance().contentInsetAdjustmentBehavior = .never }
- 自定义PageView组件:使用
UIViewRepresentable封装原生UIPageViewController实现分页效果,完全规避SwiftUI的PageTabViewStyle bug。
问题现象参考

内容的提问来源于stack exchange,提问作者alionthego
相关产品推荐
相关产品推荐

