【问题标题】:List in SwiftUI won't show upSwiftUI 中的列表不会显示
【发布时间】:2020-11-01 11:48:39
【问题描述】:

我目前正在为水平显示日期的可滚动横向日历编写代码。我目前有以下代码(这是一个非常简化的版本):

struct ScrollableCalendar: View {

    var body: some View {
        var someArray = [["May", "10", "2020"],["May", "11", "2020"],["May", "12", "2020"]]
        ScrollView(.horizontal, showsIndicators: false) {
                CalendarDateHorizBase(dates: someArray)
        }
        
    }

}


struct CalendarDateHorizBase: View {
    var dates: Array<Array<String>>
    
    var body: some View {
        HStack {
            ****THE LOGIC ERRROR OCCURS IN THIS LIST****
            List(dates, id: \.description) { date in
                    CalendarDate(month: date[0], day: date[1], year: date[2])
                
            }
        }
    }
}


*** CalendarDate() 是另一个视图,它需要月、日和年(所有字符串)并很好地显示它们。该错误与 CalendarDate() 无关***

当我尝试在没有列表的情况下对元素进行硬编码时,一切正常。但是,当我使用列表时,屏幕变得完全空白。我不知道为什么。有没有人有任何想法?谢谢!

【问题讨论】:

    标签: ios swift xcode swiftui


    【解决方案1】:

    您的日期需要是一个合适的模型,因为它无法被 List 识别。

    而且我相信你有充分的理由使用 HStack,因为我希望你知道这个列表只是垂直的。

    【讨论】:

    • “合适的模型”是什么意思?像数组之外的另一种数据结构?
    • 如果你能更新你的问题并解释你是如何使它工作的,那就太好了。
    【解决方案2】:

    问题在于数据。当您需要在List 中显示数据列表时,数据的每个元素都应为Identifiable。实现这一目标的一种方法是为您的数据定义一个结构并使其成为identifiable

    struct DateEvent: Identifiable {
        let id: String
    
        let month: String
        let day: String
        let year: String
    
        init(rawValue: [String]) {
            month = rawValue[0]
            day = rawValue[1]
            year = rawValue[2]
    
            id = rawValue.joined(separator: "/")
        }
    }
    

    所以现在你可以用它来建立你的List

    struct CalendarDateHorizBase: View {
        var dates: [[String]] // same as 'Array<Array<String>>' but more swifty style
    
        var body: some View {
            HStack {
                List(dates.map { DateEvent(rawValue: $0) }) { date in
                    CalendarDate(month: date.month, day: date.day, year: date.year)
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2021-11-20
      • 2022-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多