VStack внутри цикла ForEach, не учитывающего параметр выравнивания в WatchOS - PullRequest
1 голос
/ 11 октября 2019

У меня есть VStack с выравниванием .leading внутри петли ForEach внутри ScrollView, и параметр выравнивания не соблюдается. Если у меня есть VStack вне цикла ForEach, используется параметр выравнивания, и представление отображается правильно.

    ScrollView{
        // THIS DISPLAYS CORRECTLY
        VStack(alignment: .leading){
            Text("namename")
                .font(.headline)
                .lineLimit(1)
            Text("namename  name")
                .font(.subheadline)
                .lineLimit(1)
        }
        .padding()
        .frame(minWidth: 0, maxWidth: .infinity)
        .background(Color.gray.opacity(0.20))
        .cornerRadius(5)
        .padding(.bottom)

        ForEach(self.list_of_names, id: \.self) { item in
            // THIS DOES NOT DISPLAY CORRECTLY
            VStack(alignment: .leading){
                Text(item)
                    .font(.headline)
                    .lineLimit(1)
                Text(item + " name")
                    .font(.subheadline)
                    .lineLimit(1)
            }
            .frame(minWidth: 0, maxWidth: .infinity)
            .background(Color.gray.opacity(0.20))
            .cornerRadius(5)
            .padding(.bottom)
        }

    }
    .padding()

enter image description here

Первая строка имеет правильное выравнивание и находится вне цикла ForEach, в то время как другие строки находятся внутри цикла. Синие линии представляют меня, выделяя каждый VStack внутри ForEach цикла

1 Ответ

1 голос
/ 13 октября 2019

VStacks, созданные в цикле ForEach, похоже, соответствуют параметру выравнивания. Выравнивание текста по переднему краю применимо только к более коротким элементам в VStack.

В верхнем VStack «namename» вверху только очень далеко налево, потому что «имя namename» ниже так многошире от центра ScrollView. Таким образом, верхний VStack не является правильным способом для полного выравнивания, которое вы хотите для ScrollView.

Что вы ищете:

Оставьте параметр выравниваниядля VStack.

Добавьте параметр выравнивания в кадр VStack.

.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
...