当列表项在 Swift 中增加时,列表框架高度不会改变
List frame-height is not changing when the list items are increased in Swift
我正在学习 SwiftUI 语言,并且正在编写我的第一个供个人使用的应用程序。
所以我想要实现的是,当我写一个要添加到列表中的名称时,该名称就会添加到该列表中。但是,此列表的框架是标准的单栏,甚至隐藏了第一个列表项的一部分。我可以在列表中滚动,但这不是我希望它工作的方式。有没有一种方法可以创建一个标准的框架,该框架是 1 项的完美尺寸,并且对于添加到列表中的每个列表项,框架的高度都会增加以使其完美。如果你明白我的意思
我的代码:
struct PunishView: View {
@StateObject var viewModal = StocksViewModel()
@State var text = ""
var body: some View {
NavigationView {
VStack {
List {
Section(header: Text("Lapsus")) {
TextField("Naam...", text: $text)
.frame(minWidth: 0,
idealWidth: 100,
maxWidth: .infinity,
minHeight: 0,
idealHeight: 30,
maxHeight: .infinity,
alignment: .center)
Button(action: {
self.tryToAddToList()
},
label: {
Text("Voeg toe")
.bold()
.frame(
width: 400,
height: 60,
alignment: .center)
.background(Color.purple)
.cornerRadius(10)
.foregroundColor(Color.white)
})
.frame(minWidth: 0,
idealWidth: 100,
maxWidth: .infinity,
minHeight: 0,
idealHeight: 30,
maxHeight: .infinity,
alignment: .center)}
List {
ForEach(viewModal.stocks) {stock in
AdPistumLijst(title: stock.title)
}
}
.listStyle(PlainListStyle())
}
}
.navigationTitle("Straffenlijst")
}
}
func tryToAddToList (){
guard !text.trimmingCharacters(in: .whitespaces).isEmpty else {
return
}
let newStock = Stock(title: text)
viewModal.stocks.append(newStock)
text = ""
}
}
您在 List
中有一个 List
,这不是一个好主意。除非你手动设置那个inner-List
的高度,否则它不知道要用多少space。
您可以通过更改以下内容来解决此问题:
List {
ForEach(viewModal.stocks) { stock in
AdPistumLijst(title: stock.title)
}
}
.listStyle(PlainListStyle())
为此:
ForEach(viewModal.stocks) { stock in
AdPistumLijst(title: stock.title)
}
结果(使用的示例数据):
With inner List
Without inner List
我正在学习 SwiftUI 语言,并且正在编写我的第一个供个人使用的应用程序。 所以我想要实现的是,当我写一个要添加到列表中的名称时,该名称就会添加到该列表中。但是,此列表的框架是标准的单栏,甚至隐藏了第一个列表项的一部分。我可以在列表中滚动,但这不是我希望它工作的方式。有没有一种方法可以创建一个标准的框架,该框架是 1 项的完美尺寸,并且对于添加到列表中的每个列表项,框架的高度都会增加以使其完美。如果你明白我的意思
我的代码:
struct PunishView: View {
@StateObject var viewModal = StocksViewModel()
@State var text = ""
var body: some View {
NavigationView {
VStack {
List {
Section(header: Text("Lapsus")) {
TextField("Naam...", text: $text)
.frame(minWidth: 0,
idealWidth: 100,
maxWidth: .infinity,
minHeight: 0,
idealHeight: 30,
maxHeight: .infinity,
alignment: .center)
Button(action: {
self.tryToAddToList()
},
label: {
Text("Voeg toe")
.bold()
.frame(
width: 400,
height: 60,
alignment: .center)
.background(Color.purple)
.cornerRadius(10)
.foregroundColor(Color.white)
})
.frame(minWidth: 0,
idealWidth: 100,
maxWidth: .infinity,
minHeight: 0,
idealHeight: 30,
maxHeight: .infinity,
alignment: .center)}
List {
ForEach(viewModal.stocks) {stock in
AdPistumLijst(title: stock.title)
}
}
.listStyle(PlainListStyle())
}
}
.navigationTitle("Straffenlijst")
}
}
func tryToAddToList (){
guard !text.trimmingCharacters(in: .whitespaces).isEmpty else {
return
}
let newStock = Stock(title: text)
viewModal.stocks.append(newStock)
text = ""
}
}
您在 List
中有一个 List
,这不是一个好主意。除非你手动设置那个inner-List
的高度,否则它不知道要用多少space。
您可以通过更改以下内容来解决此问题:
List {
ForEach(viewModal.stocks) { stock in
AdPistumLijst(title: stock.title)
}
}
.listStyle(PlainListStyle())
为此:
ForEach(viewModal.stocks) { stock in
AdPistumLijst(title: stock.title)
}
结果(使用的示例数据):
With inner List |
Without inner List |
---|---|