swift 无法对齐ForEach以符合前导对齐

50few1ms  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(117)

下面的代码是:

VStack(alignment: .leading, spacing: 0) {
    HStack(alignment: .center, spacing: 3) {
        Text("Hours")
            .font(.body.weight(.bold))
    }
    ScrollViewIfNeeded(.vertical, showsIndicators: false) {
        Group {
            if item.hours != [] || !item.hours.isEmpty {
                ForEach(item.hours, id: \.self) { hour in
                    Text(hour)
                }
            } else {
                Text("No hours provided.")
            }
        }
        .font(.footnote)
        .foregroundColor(.secondary)
    }
}
.frame(width: containerWidth * 0.40)

完全不符合.leading修改器-项目当前在视图中居中。
如果我删除ForEach语句,只进行多个常规的Text("..")调用,它就可以正常工作,并向左对齐,类似于:

VStack(alignment: .leading, spacing: 0) {
    HStack(alignment: .center, spacing: 3) {
        Text("Hours")
            .font(.body.weight(.bold))
    }
    ScrollViewIfNeeded(.vertical, showsIndicators: false) {
        Group {

            Text("Hello1")
            Text("Hello2")
            Text("Hello3")

        }
        .font(.footnote)
        .foregroundColor(.secondary)
    }
}
.frame(width: containerWidth * 0.40)

上面的工作刚刚好,并向左对齐。
有人知道ForEach语句与对齐有什么区别吗?
更新:
let item: Place〈-项目的定义。

struct Place: Codable, Identifiable {
    var hours = [String]()
    
    // MARK: - SET DEFAULT PROPERTIES
    static var `default` : Place {
        Place(
            hours: ("Hours")
        )
    }
    
    init(
        hours: (String)
    ) {
        self.hours = [hours]
    }
    
    init(with p: MGLocation) {
        self.hours = p.hours ?? []
    }
}
yc0p9oo0

yc0p9oo01#

我发现,很奇怪,你必须在ScrollView内部传递一个VStack,不管你是否在ScrollView外部定义了一个VStack:

ScrollViewIfNeeded(.vertical, showsIndicators: false) {
    Group {
        VStack(alignment: .leading) {
            if item.hours != [] || !item.hours.isEmpty {
                ForEach(item.hours, id: \.self) { hour in
                    Text(hour)
                }
                .frame(alignment: .topLeading)
            } else {
                Text("No hours provided.")
            }
        }
    }
    .font(.footnote)
    .foregroundColor(.secondary)
}

奇怪,但它的工作!

相关问题