Авторазмер строки ячеек нарушается при добавлении Rectangle () в SwiftUI - PullRequest
0 голосов
/ 10 июня 2019

У меня проблемы с позиционированием простого Rectangle() в горизонтальном стеке. Если я добавлю его, Text() прекратит изменение размера следующим образом:

Fail

Если я уберу Rectangle(), прекрасно проснется:

Good

Я пытался изменить фрейм, относительный размер, layoutPriority и многое другое, но ничего не работает. Я думаю, что это ошибка, но она не работает с любым типом геометрических типов, таких как Circle, RoundedRectangle и т. Д. С другой стороны, с Image() он отлично работает.

Есть предложения?

Ой!

Ответы [ 3 ]

2 голосов
/ 10 июня 2019

Окончательное решение!Спасибо @Markicevic за базовую идею

struct RowItem: View {

    var body: some View {

        ZStack(alignment: .leading) {
            Rectangle()
                .foregroundColor(.red)
                .frame(width: 10)

            HStack {
                Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.")
                    .lineLimit(nil)

            }
            .layoutPriority(1)
            .padding(.horizontal, 20)

        }
        .background(Color.white)
        .cornerRadius(5.0)
        .shadow(color: Color.black.opacity(0.3), radius: 4.0, x: 0.0, y: 3.0)

    }

}

Однако я думаю, что это не лучшее решение и ошибка SwiftUI.

Final

2 голосов
/ 10 июня 2019

Просто написать из моей головы, может быть неправильно, но попробуйте добавить прямоугольник в VStack, чтобы он не обернул ячейку вокруг него.

VStack {
    Rectangle()
    Spacer()
}

Дайте мне знать, если это работает.

Редактировать *

Пришлось попробовать и найти «своеобразное» решение, оно может привести вас к правильному ответу, вам просто нужно расположить прямоугольник в верхнем правом углу.Сделайте это вашим RowItem.

ZStack {
        Rectangle()
            .foregroundColor(Color.red)
            .frame(width: 10, height: 10)

        Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.")
        .lineLimit(nil)
        .layoutPriority(999)
        .padding(.horizontal, 20)
    }
0 голосов
/ 25 июня 2019

Причиной такого поведения является то, что HStack предоставляет бесконечность в качестве доступной ширины для своих дочерних элементов при разметке. Таким образом, нет смысла разбивать текст на несколько строк с неограниченной доступной шириной.

Flutter предоставляет расширенный виджет для таких случаев:

Row(
    // mainAxisSize: MainAxisSize.min,
    children: <Widget>[
      RaisedButton(
          child: Text('data'), 
          onPressed: () {}
      ),
      Expanded(child: Text(s))
    ],
  )

Поскольку SwiftUI основан на идеях Флаттера (я верю), он может дать нечто подобное.

...