SwiftUI集成UIKit控制器后旋转时背景色超出安全区的解决方法
解决UIViewControllerRepresentable导致背景色超出安全区的问题
问题根源在于默认的UIViewController会将视图延伸至安全区域之外,干扰了SwiftUI的布局逻辑。可以通过以下两种方式修复:
方法一:禁用视图延伸至安全区
在创建UIViewController时,修改edgesForExtendedLayout属性,限制其布局范围在安全区内:
struct CustomRepresentation: UIViewControllerRepresentable{ func makeUIViewController(context: Context) -> some UIViewController { let vc = UIViewController() // 禁止视图延伸到安全区外 vc.edgesForExtendedLayout = [] return vc } func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { } }
方法二:设置UIViewController视图背景透明
如果你的UIKit控制器不需要独立背景色,可以将其视图背景设为透明,避免遮挡SwiftUI的背景布局:
struct CustomRepresentation: UIViewControllerRepresentable{ func makeUIViewController(context: Context) -> some UIViewController { let vc = UIViewController() vc.view.backgroundColor = .clear return vc } func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { } }
两种方法都能解决旋转屏幕后背景色超出安全区的问题:若UIKit控制器有自定义内容,方法一能确保其自身布局也遵守安全区规则;若仅需占位或透明容器,方法二更简洁。
内容的提问来源于stack exchange,提问作者test1229
相关产品推荐
相关产品推荐

