Как создать многострочный текст внутри ScrollView в SwiftUI?
Поскольку 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
фрейма?
Ответы
Ответ 1
В Xcode 11 GM:
Для любого представления 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)
}
}
}
Ответ 2
Вы можете заставить представления заполнять их идеальный размер, например, в вертикальном 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)
}
Мне немного лучше, чем модифицировать рамку.
Ответ 3
Кажется, в 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)
}
Ответ 4
Следующее работает для меня с бета- версией 3 - без проставок, без ограничений по ширине, гибких ограничений по высоте 👍:
ScrollView {
VStack {
Text(longText)
.lineLimit(nil)
.font(.largeTitle)
.frame(idealHeight: .infinity)
}
}
Ответ 5
Вам также может помочь этот ответ для GM Xcode 11:
fooobar.com/info/17814703/...
Суть в том, что внутри других Builder вам нужно добавить .fixedSize(horizontal: false, vertical: true)
в ваш Text(), чтобы обернуть его.