在 Swift 中增加列表项时,列表框架高度不会改变
Posted
技术标签:
【中文标题】在 Swift 中增加列表项时,列表框架高度不会改变【英文标题】:List frame-height is not changing when the list items are increased in Swift 【发布时间】:2021-08-30 16:34:02 【问题描述】:我正在学习 SwiftUI 语言,并且正在编写我的第一个供个人使用的应用程序。 所以我想要实现的是,当我写一个要添加到列表的名称时,该名称会添加到该列表中。但是,此列表的框架是标准的一个单栏,甚至隐藏了第一个列表项的一部分。我可以滚动浏览列表,但这不是我想要的工作方式。有没有一种方法可以创建一个标准的完美尺寸的框架,并且对于添加到列表中的每个列表项,框架都会增加高度以使其完美。如果你知道我的意思
我的代码:
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 = ""
【问题讨论】:
你能创建一个minimal reproducible example 来重现问题吗?准确理解你的意思有点困难,所以运行代码并查看结果会很有帮助。 imgur.com/3JlMKZu 如您所见,列表中现在有 1 个名称,并且框架未正确缩放以提供正确的显示。现在我在问是否有办法使该框架的高度根据该列表中的名称数量进行缩放 这是否回答了您的问题***.com/a/62057285/12299030? 【参考方案1】:List
中有一个 List
,这不是一个好主意。除非您手动设置该内部-List
的高度,否则它不会知道要使用多少空间。
您可以通过更改来解决此问题:
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
|
---|---|
【讨论】:
以上是关于在 Swift 中增加列表项时,列表框架高度不会改变的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加