繁体   English   中英

SwiftUI:强制列表行调整高度到内容

[英]SwiftUI: Force List Row to adjust height to content

我遇到了一些不会改变行高的列表的问题。 我把它分成一个简单的例子。

这是整个演示代码:

struct ContentView: View {
  let items = ["item 1", "item 2", "item 3"]
  @State var error: [String: String] = []
  
  var body: some View {
    List {
      ForEach(self.items, id: \.self) { item in
        VStack {
          Text(item)
            .padding()
          if let e = error[item] {
            Text(e)
          }
        }
        .swipeActions(edge: .leading, allowsFullSwipe: true) {
          Button(action: {
            self.error[item] = "ERROR!"
          }) {
            Image(systemName: "square.and.arrow.up")
          }.background(Color.blue)
        }
      }
    }
  }
}

一旦用户滑动单元格,我想在常规项目下方显示一条错误消息。 不幸的是,现在发生的事情是这样的:

问题

我希望它看起来像这样(为此,我在代码中的“错误”字典中添加了一个元素):

使固定

在我看来,这似乎是许多人都会面临的问题,但我无法找到有关此问题的太多信息。 我已经尝试了一些东西(例如'.fixedSize'修饰符),但我尝试过的任何东西都没有奏效。

列出缓存创建的行,所以我们需要让它知道应该从头开始重建特定的行。 可能的解决方案是使用.id取决于与可选错误文本相同的条件。

使用 Xcode 13.2 / iOS 15.2 测试

在此处输入图像描述

这是修改的部分代码(为演示添加了一些额外的代码):

.swipeActions(edge: .leading, allowsFullSwipe: true) {
  Button(action: {
    if nil == self.error[item] {
        self.error[item] = "ERROR!"
        } else {
            self.error[item] = nil
        }
  }) {
    Image(systemName: "square.and.arrow.up")
  }.background(Color.blue)
}
.id(item + (self.error[item] ?? ""))   // << here !!

备份

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM