gpt4 book ai didi

ios - 如何在 swift 的动态 tableView 中有多个单元格大小?

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:37 25 4
gpt4 key购买 nike

我想在 tableView 中使用不同大小的单元格,但在构建和运行应用程序之后,我发现所有单元格都具有相同的大小,并且较大的单元格被裁剪,其内容变得不完整。我在属性检查器中设置大小。

this is an screenshot

最佳答案

它就像实现一样简单:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return CGFloat(#your desired size#)
}

只需在此函数中使用一个 switch/case 并使用 indexPath.row。您还可以使用 UITableViewAutomaticDimension 自动调整大小

编辑:

根据标题、问题描述和提供的图片,我猜测了 3 种可能的情况,并试图在上面的简短回答中涵盖所有情况。但是作为Rikh以为不是这种情况,我要把事情弄清楚。

记住,对于动态行,您必须将所有 View 固定在它们在自动布局中的位置,这意味着您必须设置从场景顶部到底部以及从左到右的约束。可能的情况是:

情况 1:您的表中有 2 个不同的单元格并且您知道它们的大小(第一行是 type1,其他单元格是 type2)。

在这种情况下,你只需要在我提到的函数中添加一个 if 子句或 switch/case 就可以了(假设第一行是 88 点,其余是 44 点):

return indexPath.section == 0 ? CGFloat(88.0) : CGFloat(44.0)

情况 2:您的第一行是固定大小,其余是动态的。

在为单元格设置正确的约束后,在 viewDidLoad 中添加 tableView.estimatedRowHeight = CGFloat(44.0),其中 estimatedRowHeight 是单元格的最小可能高度。然后你可以这样写你的代码:

return indexPath.section == 0 ? CGFloat(88.0) : UITableViewAutomaticDimension

情况 3:你的行高都是动态的,你希望它们都自己扩展。在这种情况下,您根本不需要我提到的功能。实际上,如果您的代码中有它,则必须将其删除。在这种情况下,继续并将此代码添加到代码的 viewDidLoad 中(假设单元格的最小可能高度为 44 点):

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = CGFloat(44.0)

再次记住,正确设置所有约束对于使其正常工作非常重要。举个例子:我猜“detail”标签会让你的行的高度增加,而标题是固定大小的,所以这些是你在“detail”标签上需要的约束:将它的高度设置为大于等于(>=) 21,将其设置为在 superview 中间垂直对齐(通过在 Storyboard中设置“Vertically in Container”约束),将水平空间设置为“title”标签,将尾部空间设置为 superview,将行数设置为 0 使其扩展无限,最后将换行属性设置为“自动换行”。在这种情况下,你的标题必须有特定的宽度限制,否则你会得到一个错误。

P.S.:实际上,既然我正在写这篇文章,我可以想象另一种情况,您的“标题”标签的宽度也是动态的。这将使您的 tableView 变得非常丑陋,但如果这是您的情况,您需要在标签上设置“内容拥抱”和“内容压缩”,描述为 Here (CHCR)

关于ios - 如何在 swift 的动态 tableView 中有多个单元格大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com