在 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 中增加列表项时,列表框架高度不会改变的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 列表行布局

如何根据第二列的内容调整下拉列表中每一行的高度?

UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

iOS 14,Swift UI 2 更改 NavigationLink 内选定列表项的背景颜色

如何在 Vue 中删除列表项时为列表项设置动画

如何使用 SwiftUI 中的图像修复 NavigationView 列表行中增加的高度"