如何针对不同iOS版本维护SwiftUI代码?避免视图代码重复
基于iOS版本的条件修饰符实现方案,避免视图代码重复
有没有办法基于iOS版本使用条件修饰符?我想避免重复编写整个视图代码,既要适配低版本iOS,又能在iOS 16及以上系统使用对应API。不想用下面这种重复写整个视图的方式:
if #available(iOS 16.0, *) { NavigationView { List { Section { Text("Item 1") } Section { Text("Item 2") Text("Item 3") Text("Item 4") } Section { Text("Item 5") Text("Item 6") Text("Item 7") } } .background(.pink) .scrollContentBackground(.hidden) //仅iOS16及以上可用 } } else { NavigationView { List { Section { Text("Item 1") } Section { Text("Item 2") Text("Item 3") Text("Item 4") } Section { Text("Item 5") Text("Item 6") Text("Item 7") } } .background(.pink) //.scrollContentBackground(.hidden) } }
我基于Benzy Neez的思路实现了如下方案:
struct HideScrollBackgroundIfAvailableIOS16Modifier: ViewModifier { func body(content: Content) -> some View { if #available(iOS 16, *) { content .scrollContentBackground(.hidden) } else { content } } } extension View { /// iOS16及以上隐藏滚动视图背景,以便显示自定义背景 func hideScrollBackgroundIfAvailableIOS16() -> some View { self.modifier(HideScrollBackgroundIfAvailableIOS16Modifier()) } }
使用方式非常简洁,直接给目标视图添加自定义修饰符即可:
List { // 列表内容 } .hideScrollBackgroundIfAvailableIOS16() .myModifierWithBackgroundImage
内容的提问来源于stack exchange,提问作者biggreentree
相关产品推荐
相关产品推荐

