【问题标题】:SwiftUI: Initial list element's position is wrongSwiftUI:初始列表元素的位置错误
【发布时间】:2020-02-04 18:04:50
【问题描述】:

我是 Swift 新手,我对列表视图有疑问。

下面的代码创建了一个图像列表,作为一个按钮,后跟一个文本。

问题是 List 元素最初是稍微靠左的,但是当它们第一次更新时它们会向右移动到位。

import SwiftUI

struct TodoItem {
    var name: String
    var completed: Bool

    init(_ name: String) {
        self.name = name
        self.completed = false
    }
}

struct ContentView: View {

    @State var todos: [TodoItem] = [
        TodoItem("This"),
        TodoItem("Is"),
        TodoItem("Some"),
        TodoItem("Todo"),
        TodoItem("Task")
    ]

    var body: some View {
        NavigationView {
            List(todos.indices) { index in
                HStack {
                    Image(systemName: self.todos[index].completed ? "checkmark.circle" : "circle")
                        .imageScale(.large)
                        .onTapGesture {
                            self.todos[index].completed.toggle()
                        }

                    Text(self.todos[index].name)
                    Spacer()
                }
            }
            .navigationBarTitle("Todos")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

【问题讨论】:

    标签: swift swiftui swiftui-list


    【解决方案1】:

    这是固定的主体(经过测试并适用于 Xcode 11.3.1)

    var body: some View {
        NavigationView {
            List {
                ForEach (todos.indices) { index in
                    HStack {
                        Image(systemName: self.todos[index].completed ? "checkmark.circle" : "circle")
                            .imageScale(.large)
                            .onTapGesture {
                                self.todos[index].completed.toggle()
                            }
    
                        Text(self.todos[index].name)
                        Spacer()
                    }
                }.listRowInsets(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20))
            }
            .navigationBarTitle("Todos")
        }
    }
    

    【讨论】:

    • 非常感谢!
    • 你到底做了什么改变,为什么现在可以工作?
    猜你喜欢
    • 2020-10-07
    • 2018-04-29
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多