Всегда делайте текстовый элемент «двумя строками»

У меня такой вертикальный стек

      VStack
  Text(lineA)
    .lineLimit(2)

  Text(lineB)

  Text(lineC)
}

Не спрашивайте меня, почему. Мои начальники решили, что хотят первое Text всегда с двумя строками, даже если в переменной lineA нет символов, чтобы текст увеличился до двух строк.

Есть ли способ сделать первый текст для рендеринга, если он состоит из двух строк, и по-прежнему отображать скрытность, если имеется более двух строк?

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

Есть ли менее смертоносное решение?

2 ответа

Решение

Вот возможное решение (протестировано с Xcode 12.4 / iOS 14.4)

      var body: some View {
    VStack {
        Text("X\nX").foregroundColor(.clear)
            .frame(maxWidth: .infinity)
            .overlay(
                Text("sdfasdfasdfasd asd f asdf asd f asdf asd fas df ")
//              Text("sdfasdfasdfasd asd f asdf asd f asdf asd fas df asdf asd fa sdf asdfasdfasd asdf as df asdfasdf asdf")
            , alignment: .top)

        Text("lineB")
        Text("lineC")
    }
}

Следующий блестящая идея, я протестировал другой вариант, который мне больше подошел:

      var body: some View {
    VStack {
        Text("asdfasfdasfasfasfafddafas\n")
            .lineLimit(2)
            .foregroundColor(.black)
            .frame(maxWidth: .infinity)

        Text("lineB")
        Text("lineC")
    }
}

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

Другие вопросы по тегам