#ios #swift #swiftui
Вопрос:
У меня есть представление, аналогичное приведенному ниже коду. По какой-то причине мой длинный текст сокращается, хотя этого не должно быть. Почему это так?
struct ContentView: View {
var body: some View {
VStack {
ScrollView {
VStack(alignment: .leading, spacing: 32) {
HStack(alignment: .top, spacing: 8) {
Image(systemName: "hand.raised.fill")
.resizable()
.frame(width: 50, height: 50)
VStack(alignment: .leading) {
Text(shortText)
Text(longDescription)
.lineSpacing(4)
// this is being condensed
}
}
}
.padding([.leading, .trailing])
}
}
VStack {
// Custom Button goes here
Spacer()
}
.frame(height: 70)
}
}
Комментарии:
1. Хорошо, я просто исправил это после публикации, добавив
.layoutPriority(1)
к длинному тексту. Кто-нибудь может объяснить, зачем ему это понадобилось?2. Я не смог воспроизвести его, как на iOS 14, так и на iOS 15 я вижу полный текст с вашим кодом
3. @Tometoyou: Я пробовал ваши коды, в которых нет необходимости
.layoutPriority(1)
, или.lineSpacing(4)
все были хороши без проблем! xCode: Версия 12.5.1 (12E507) PS: Также не забывайте использовать.scaledToFit()
после.resizable()
для изображения!4. Вы пробовали это с длинным отрывком текста? Он отсекает дефо. И для этого нужны пробелы.
5. Да! Я пробовал даже с длинным!
Ответ №1:
.layoutPriority(1)
говорит системе компоновки, что она должна отдавать приоритет желаемым размерам этого вида по сравнению с чем-либо с более низким приоритетом, чтобы он не уплотнялся.
Причина, по которой вы Text
сгущаетесь, заключается в том, что он находится в ScrollView
.
В контексте без прокрутки система компоновки позволяет видам расширяться, используя доступное пространство (т. е. Размер экрана) в качестве ограничения.
В контексте прокрутки нет ограничений на доступное пространство, поэтому разрешение представлениям расширяться до максимального размера может привести к тому, что некоторые представления будут иметь бесконечный размер ( Color.red
например, будут пытаться занять как можно больше места).
Вот почему ваш Text
вид сжат до минимального пространства, которое он поддерживает (высота одной строки), в отличие от максимального размера, который он поддерживает.
пс. Может существовать комбинация модификаторов, которая не layoutPriority(1)
позволяет Text
указывать минимальный размер как необходимый размер для отображения всего содержимого. Если у меня будет время попытаться найти его, я обновлю этот ответ.
Комментарии:
1. Но что на самом деле заставляет его конденсироваться?
2. @Tometoyou добавил более подробную информацию к моему ответу
3. Ладно, на самом деле это не сводится к одной строке, а к трем строкам высотой. Я думаю, что это имеет смысл, хотя