Поскольку List не похоже, что его можно настроить для удаления разделителей строк в данный момент, я использую ScrollView с VStack внутри него, чтобы создать вертикальное расположение текстовых элементов. Пример ниже:
ScrollView {
VStack {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(0)
}.frame(width: UIScreen.main.bounds.width)
}
Результирующий отображаемый Text усекается до одной строки. Вне ScrollView он отображается как многострочный. Как мне добиться этого внутри ScrollView, кроме явной установки высоты для Text фрейма?
Text сжимается до указанной ширины, как и ожидалось. Но все же однострочный @Fogmeister
вы можете рассчитать высоту текста по ширине. И установите его в кадр TEXT. это будет работать нормально
Это ошибка. Для этого есть обходной путь... icalvin.dev/post/403





В Xcode 11 ГМ:
Для любого вида Text в стеке, вложенного в вид прокрутки, используйте обходной путь .fixedSize(horizontal: false, vertical: true):
ScrollView {
VStack {
Text(someString)
.fixedSize(horizontal: false, vertical: true)
}
}
Это также работает, если есть несколько многострочных текстов:
ScrollView {
VStack {
Text(someString)
.fixedSize(horizontal: false, vertical: true)
Text(anotherLongString)
.fixedSize(horizontal: false, vertical: true)
}
}
Если содержимое вашего стека динамическое, то же решение работает:
ScrollView {
VStack {
// Place a single empty / "" at the top of your stack.
// It will consume no vertical space.
Text("")
.fixedSize(horizontal: false, vertical: true)
ForEach(someArray) { someString in
Text(someString)
.fixedSize(horizontal: false, vertical: true)
}
}
}
Ошибка не появляется в Preview, верно? Потому что в предварительном просмотре он показывал то же поведение усечения, что и раньше... но без Spacer() все работало нормально..
Потрясающий! Я использовал программу для чтения геометрии... но слишком много за слишком мало
Начиная с бета-версии 5, .infinity у меня вылетает, но .frame(idealHeight: .greatestFiniteMagnitude) работает.
У меня есть много динамически генерируемых представлений внутри прокрутки, некоторые из них содержат текст на несколько слоев ниже соответствующего дерева представлений. К сожалению, ни одно из этих решений не работает — я все еще вижу кучу текстовых полей, сжатых в одну строку. Кто-нибудь сталкивался с подобной проблемой? Я на выпуске GM Xcode
Почему это работает? было бы более разумно иметь истину и ложь наоборот, поскольку вертикальная высота должна быть гибкой, а не фиксированной.
Похоже, в SwiftUI есть ошибка. На данный момент вам нужно указать высоту для вашего контейнера VStack.
ScrollView {
VStack {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(nil)
}.frame(width: UIScreen.main.bounds.width, height: 500)
}
У меня с Бета 3 работает следующее: без прокладки, без ограничения по ширине, с гибким ограничением по высоте ?:
ScrollView {
VStack {
Text(longText)
.lineLimit(nil)
.font(.largeTitle)
.frame(idealHeight: .infinity)
}
}
Вы можете заставить представления заполнить свой идеальный размер, например, в вертикальном ScrollView:
ScrollView {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.fixedSize(horizontal: false, vertical: true)
}
Для меня это немного лучше, чем модификация рамы.
Правильное решение — просто установить выравнивание для вашего стека:
VStack(alignment: .leading)
ScrollView {
VStack(alignment: .leading) {
// ...
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer mattis ullamcorper tortor, nec finibus sapien imperdiet non. Duis tristique eros eget ex consectetur laoreet.")
.lineLimit(0)
}.frame(width: UIScreen.main.bounds.width)
}
Таким образом, вам не нужен fixedSize, поскольку макет определен правильно.
Что произойдет, если вы дадите
Textрамку с шириной?