SwiftUI: запретить расширение представления внутри VStack
У меня есть такой VStack со списком внутри
VStack(alignment: .leading, spacing: 16) {
Text("Contacts")
.font(.custom("AvenirNext-DemiBold", size: 20))
.foregroundColor(Color("DarkTitle"))
.padding(8).layoutPriority(1)
List(self.contacts) { contact in
ContactOption(contact: contact)
.padding(.horizontal, 4)
} //.frame(height: 240)
}
Проблема с этим кодом заключается в том, что List пытается максимально расширить контент, занимая здесь весь экран, несмотря на то, что у него всего 4 контакта.
Я могу установить эту высоту на фиксированное значение, используя frame(height: 240)
Я считаю, что есть возможность заставить List оборачивать его содержимое, как это делает представление Text(). то есть, если есть 4 строки в содержимом переноса списка, чтобы отобразить только эти 4 строки, если есть 8 строк, расширьте до этих 8 строк. Затем я мог бы установить максимальную высоту, например. 400, выше которого список больше не может расширяться, и тогда его можно будет прокручивать.
1 ответ
Хорошо , я немного попробовал, и я не уверен, можете ли вы его использовать или нет, но проверьте это: (просто нажмите на добавление и удаление, чтобы увидеть, как список становится больше и меньше)
struct ContactOption : View {
var contact: String
var body: some View {
Text(contact)
}
}
struct ListView : View {
var contacts: [String]
var body : some View {
// List(self.contacts, id: \.self) { contact in
// ContactOption(contact: contact)
// .padding(.horizontal, 4)
// }
List {
ForEach (contacts, id: \.self) { contact in
Text (contact)
}
}
}
}
struct ContentView: View {
@State var contacts = ["Chris", "Joe", "Carla", "another"]
var body: some View {
VStack() {
HStack {
Button("Add") {
self.contacts.append("dust")
}
Button("Remove") {
self.contacts = self.contacts.dropLast()
}
}
Text("Contacts")
.foregroundColor(Color.blue)
.padding(8).layoutPriority(1)
Form {
ListView(contacts: contacts)
Section(footer: Text("hi")) {
Text("hi")
}
}
Divider()
Text("end list")
.foregroundColor(Color.orange)
}
}
}