横屏App中全屏ZStack内矩形未居中的问题咨询
问题原因
直接使用UIScreen.main.bounds获取尺寸是问题根源:
UIScreen.main.bounds返回的是设备物理方向的尺寸,不会随界面横屏旋转调整宽高对应关系。- 横屏模式下,SwiftUI视图坐标系已旋转,此时界面实际宽度对应设备物理高度、高度对应设备物理宽度,但你用物理宽度计算矩形宽度,导致尺寸匹配错误,最终出现左右留白不均、矩形不居中的情况。
解决方案
改用GeometryReader获取当前视图的可用布局尺寸,它能自动适配界面旋转方向:
struct ContentView: View { var body: some View { GeometryReader { geo in ZStack { Rectangle() .foregroundColor(.blue) .frame(width: geo.size.width * 0.9, height: geo.size.height * 0.9) } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(.gray) } .ignoresSafeArea(.all) } }
补充说明
GeometryReader会提供当前容器的准确布局尺寸,完全适配横/竖屏的界面方向变化。- 避免直接依赖
UIScreen.main.bounds做SwiftUI布局,它属于UIKit API,和SwiftUI布局系统适配性较差。
内容的提问来源于stack exchange,提问作者soleil
相关产品推荐
相关产品推荐

