如何使用 iOS 14+ 的 ScrollViewReader 和 iOS 13 的部署目标

Posted

技术标签:

【中文标题】如何使用 iOS 14+ 的 ScrollViewReader 和 iOS 13 的部署目标【英文标题】:How to use ScrollViewReader for iOS 14+ with deployment target of iOS 13 【发布时间】:2020-07-24 18:31:57 【问题描述】:

ios 14 添加了一个新的ScrollViewReader 视图,您可以将其添加到ScrollViewList 下的视图层次结构中,以便能够通过id 滚动到特定视图。但是,当您的部署目标是 iOS 13 时,如何在不使用 if #available 包装来复制视图层次结构的情况下添加它?

List 
    ScrollViewReader  reader in //FIXME: 'ScrollViewReader' is only available in iOS 14.0 or newer
        Section(header:
            Text("Header")
                .id(0)
        ) 
            ForEach(items)  item in
                ItemCell()
            
        
        
        //for an example
        if #available(iOS 14.0, *) 
            Button("Scroll to Top") 
                reader.scrollTo(0)
            
        
    

【问题讨论】:

我认为不复制您的视图层次结构并使用if #available 是不可能的,但如果是的话,我会对结果感兴趣。 【参考方案1】:

只需为ScrollView 的“内脏”定义一个单独的ContentView,然后您可以使用if #available(iOS 14.0, *) 选择性地包含ScrollViewReader

if #available(iOS 14.0, *) 
    ScrollViewReader  reader in
        ContentView()
    
 else 
    ContentView()

【讨论】:

以上是关于如何使用 iOS 14+ 的 ScrollViewReader 和 iOS 13 的部署目标的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Horizo​​ntal ScrollView 项目在 iOS 14.3 中滚动时变得不可见,但在 iOS 13 中工作正常

SwiftUI: ScrollView offset

如何使用AutoLayout(iOS / Xamarin.iOS)使ScrollView适合其内容?

如何使用 AutoLayout (iOS/Xamarin.iOS) 使 ScrollView 适合其内容?

Qt Quick Controls 2.14 如何设置ScrollView的样式

iOS_7_scrollView大图缩放