Swift UI 列出 Mac Catalyst 上不匹配的部分

Posted

技术标签:

【中文标题】Swift UI 列出 Mac Catalyst 上不匹配的部分【英文标题】:Swift UI List mismatched sections on Mac Catalyst 【发布时间】:2021-02-01 05:36:02 【问题描述】:

尝试在 Mac 上使用催化剂构建列表视图

这是我的列表视图代码。我有三个部分(国家、州、城市)。填充列表的数据是视图的属性。当我在 Mac 上运行此代码时,城市部分显示国家数据。在 iPhone 和 iPad 上看起来不错。附上截图

struct ContentView: View 

    
    private var countries: [String] = [ "United States of America",
                                        "Australia",
                                        "India",
                                        "England",
                                        "New zealand",
                                        "Switzerland",
                                        "Canada"]
    
    private var states: [String] =  [ "Colorado",
                                      "Texas",
                                      "Georgia",
                                      "Florida",
                                      "California",
                                      "Arizona",
                                      "Maryland",
                                      "New Jersey",
                                      "North Carolina",
                                      "South Carolina",
                                      "Alabama"]
    
    private var cities: [String] = [ "Los Angeles",
                                     "San Franscisco",
                                     "Atlanta",
                                     "Miami",
                                     "Dallas",
                                     "Austin"]
    
    var body: some View 
        List 
            
            Section(header: Text("Countries")) 
                ForEach(0 ..< countries.count) 
                    Text(countries[$0])
                
            
            
            Section(header: Text("States")) 
                ForEach(0 ..< states.count) 
                    Text(states[$0])

                
            
            
            Section(header: Text("Cities")) 
                ForEach(0 ..< cities.count) 
                    Text(cities[$0])
                
            
            
        
    

【问题讨论】:

【参考方案1】:

由于您的 ForEach 未识别(所有三个部分都有相同的索引),请尝试为行提供唯一 ID,例如

    List 
        Section(header: Text("Countries")) 
            ForEach(0 ..< countries.count) 
                Text(countries[$0]).id("1.\($0)")
            
        
        
        Section(header: Text("States")) 
            ForEach(0 ..< states.count) 
                Text(states[$0]).id("2.\($0)")
            
        
        
        Section(header: Text("Cities")) 
            ForEach(0 ..< cities.count) 
                Text(cities[$0]).id("3.\($0)")
            
        
    

【讨论】:

谢谢。这似乎有效。为什么它可以在没有任何 id 的 iphone 和 ipad 上运行?只是好奇 我们只能猜测——但这肯定是由于 SwiftUI 内部对 ios 和 Catalyst 的不同实现。

以上是关于Swift UI 列出 Mac Catalyst 上不匹配的部分的主要内容,如果未能解决你的问题,请参考以下文章

Mac Catalyst 中的弃用警告,但仅在 Objective-C 中,而不是在 Swift 中

Mac Catalyst 中的透明工具栏

苹果将代码教学应用Swift Playgrounds引入Mac

Xcode 11 - 在催化剂 Swift 中禁用调整大小模式

苹果发布 Mac 版 Swift Playgrounds 应用

如何在 Mac 上的 Mac Catalyst 应用程序中使用钥匙串?