#swiftui
#swiftui
Вопрос:
Я пытаюсь разобраться в основах ScrollViews в SwiftUI. Я подумал, что если я создам a Text
с рамкой шириной экрана и .infinite height, что, как я понял, означает «такой же большой, как доступное пространство, например, безопасная зона», и поместил его в a ScrollView
с другим Text
компаньоном, я бы получил размер экрана Text
, который можно прокручивать по горизонтали докомпаньон Text
.
struct ContentView: View {
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
GeometryReader { geometry in
VStack {
Text("crash me")
}
.frame(width: geometry.size.width,
height: .infinity,
alignment: .topLeading)
}
Text("crash me")
}
}
}
Если я запускаю это, он просто вылетает. Что в этом такого глупого?
Комментарии:
1. Xcode выдает предупреждение во время выполнения: «Недопустимый размер кадра (отрицательный или не конечный)». Это должно дать вам хорошее представление о том, что вы создаете бесконечный цикл.
2. @George_E да, я так и предполагал. Это .infinite, который приводит к сбою системы.
3. Установка высоты
.infinite
является проблемой — возможно, вы имели в виду.frame(maxHeight: .infinity)
?4. @George_E Ах, ты справился. Это было прямо перед моим носом все время…
Ответ №1:
Вместо:
.frame(height: .infinity)
Вы должны использовать:
.frame(maxHeight: .infinity)
Установка точной высоты на .infinity
невозможно, но maxHeight
означает, что представление увеличит свою высоту до максимально возможного значения. Это может быть размер экрана или любой другой ограничивающий фактор, установленный родителем.