You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对不同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:33:36