Как сделать изменяемый размер текста в элементе списка в Swift UI - PullRequest
1 голос
/ 18 июня 2019

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

Я пытался использовать .fixedSize () и некоторые вычисления UILabel, но я мог это исправить.

Кнопка навигации, которая также является ячейкой в ​​списке:

NavigationButton(destination: ..., isDetail: true, label: {
                    Cell(model: rowModel)
                })
struct Cell: View {
    var model: OfferModel

    var body: some View {
        VStack {
            HStack {
                Image(systemName: "camera").frame(width: 60, height: 60)
                VStack(alignment: .leading) {
                    Text(model.name)
                        .font(.caption)
                        .textContentType(.name)
                    Text(self.model.text)
                        .lineLimit(3)
                        .multilineTextAlignment(.leading)
                        .font(.title)
                }
                Spacer()
                OfferPriceView(model: model, alignment: .trailing)
            }
            OfferDetailInformationView(key: "Street", value: model.adress, style: .streetAddressLine1)
            OfferDetailInformationView(key: "City", value: model.city, style: .addressCity)
            OfferDetailInformationView(key: "Country", value: model.country, style: .countryName)
        }
    }
}
struct OfferDetailInformationView: View {
    var key: String
    var value: String
    var style: UITextContentType?

    init(key: String, value: String, style: UITextContentType? = nil) {
        self.key = key
        self.value = value
        self.style = style
    }

    var body: some View {
        HStack {
            Text("\(key):").bold()
            Text(value)
            .textContentType(style)
            Spacer()
        }
    }
}
struct OfferPriceView : View {
    let model: OfferModel
    let alignment: HorizontalAlignment

    init(model: OfferModel = .example, alignment: HorizontalAlignment = .center) {
        self.model = model
        self.alignment = alignment
    }

    var body: some View {
        VStack(alignment: alignment) {
            Text("\(String(format: "%.2f", model.cost))\(model.currency)").bold().color(.red)
            Text(model.paymentRate).color(.red)
        }
    }
}

Я бы хотел, чтобы текст с model.text расширялся по вертикали, если текст не помещается в одну строку. А пока он просто обрезает текст в одну строку.

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

  • Просмотр содержимого:
    • Список:
      • Кнопка навигации:
        • Вертикальный стек:
          • Горизонтальный стек:
            • Изображение
            • Вертикальный стек:
              • Текст (model.name)
              • Текст (model.text)
            • Распорка
            • Вертикальный стек (внутри OfferPriceView):
              • Текст
              • Текст
          • Горизонтальный стек (OfferDetailInformationView)
            • Текст (валюта)
            • Текст (оплата)
            • Распорка

Ответы [ 2 ]

0 голосов
/ 18 июня 2019
Модификатор

.lineLimit - это тот, который управляет высотой Text в зависимости от их содержимого.

Так что, если вы хотите иметь неограниченное количество строк текста (должны помещаться на экране или вы должны использовать ScrollView), вы должны использовать это:

.lineLimit(nil)

, если nil недопустимо, поэтому установите для него большое целое число:

.lineLimit(Int.max) 

Имейте в виду Второй вариант - это просто обходной путь до тех пор, пока SwiftUI не достигнет первой версии выпуска.

0 голосов
/ 18 июня 2019

Вы можете использовать lineLimit (nil), чтобы сделать текст многострочным

    Text(repo.description)
                .font(.subheadline)
                .lineLimit(nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...