SwiftUI中如何让深色模式预览与.sizeThatFits同时生效?
SwiftUI深色模式预览
.sizeThatFits失效修复方案 问题根源
直接通过.environment(\.colorScheme, .dark)注入深色模式环境值时,会触发Xcode预览系统切换到全设备渲染上下文,自动覆盖.previewLayout(.sizeThatFits)的自适应布局规则,强制使用完整设备尺寸渲染预览,该表现与修饰符的添加顺序无关。
修复方案
使用SwiftUI预览专用的颜色方案修饰符.preferredColorScheme(.dark)替代通用环境值注入,该修饰符不会触发预览上下文切换,可与.sizeThatFits自适应布局正常配合。
修正后可正常生效的代码:
Group { MyView() .previewLayout(.sizeThatFits) MyView() .preferredColorScheme(.dark) .previewLayout(.sizeThatFits) .previewDisplayName("Dark Mode") }
旧版本Xcode兼容方案
如果是Xcode 14及更早版本,上述写法仍存在失效概率,可以给深色模式预览项显式置空预览设备,再绑定布局规则:
Group { MyView() .previewLayout(.sizeThatFits) MyView() .environment(\.colorScheme, .dark) .previewDevice(.none) .previewLayout(.sizeThatFits) .previewDisplayName("Dark Mode") }
注意:SwiftUI预览修饰符遵循后写入优先级更高的规则,
.previewLayout需要放在所有环境类、展示样式类修饰符的最后,才能保证布局规则不被覆盖。
内容的提问来源于stack exchange,提问作者Aaron Bratcher
相关产品推荐
相关产品推荐

