gpt4 book ai didi

ios - 无法通过 heightForRowAt 获取 TableView 中的单元格

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:26 25 4
gpt4 key购买 nike

我尝试为动态内容设置单元格高度。在单元格中,我使用了两个 UILabel,但我无法从 tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) 访问单元格。正如 tableview 显示的那样,有来自 img 的单元格,但是当我在模拟器中运行应用程序时 print("Cell geted") 没有输出任何内容。 我只是 IOS 开发的初学者,所以我的应用程序中可能存在一些错误的配置。我想知道是什么原因导致的

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = self.tableView.cellForRow(at: indexPath) as? ArticleTableViewCell
if(cell != nil) {
print("Cell geted")
}
return 120
}

enter image description here

我使用 xib 文件来定义单元格

Comtum 细胞类如下

import UIKit

class ArticleTableViewCell: UITableViewCell {

@IBOutlet weak var time: UILabel!
@IBOutlet weak var digest: UILabel!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
time.layer.borderWidth = 1
//time.layer.masksToBounds = true
time.layer.cornerRadius = 10
time.backgroundColor = UIColor.cyan
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

}

和下面的 Storyboard xib 文件

enter image description here

最佳答案

heightForRow 中,您应该返回 UITableViewAutomaticDimension。如果您这样做,那么 tableView 在从 cellForRowAt 获取单元格时会自动使用自动布局。

简而言之:

  1. viewDidLoad 设置中:

    tableView.estimatedRowHeight = 100
    tableView.rowHeight = UITableViewAutomaticDimension
  2. 在单元格中设置自动布局,以便单元格可以根据其内容确定自己的大小。

    要使用自动布局在 xib 单元中设置单元设计,请阅读 this article .在您的情况下,您可以执行以下操作:

    首先,单击标签将其选中。然后点击右下角的“Add New Constraints”图标,见下图:

    enter image description here

    一个小弹出窗口显示,其中设置了一些常量,这些常量定义了标签应该被约束到单元格的上、左、下和右角的距离。确保指示正在激活的约束的红线是实线(一旦您填写常量,它们应该从虚线变为实线)。首先尝试为每个方向设置 8,稍后您可以尝试。

enter image description here

However, make sure that you read [this article][1] and also [this article on autolayout][4].
  1. 只需返回 cellForRowAt 中的一个单元格。 TableView 将使用单元格的自动布局来确定其高度。

参见 this answer有关详细信息,或我的 other answer for an example in code .

编辑

要使单元格根据行数展开,在didSelect中将标签的行数设置为0,并使用以下方法告诉tableView重绘自身:

func refreshTableAfterCellExpansion() {
self.tableView.beginUpdates()
self.tableView.setNeedsDisplay()
self.tableView.endUpdates()
}

didDeselect 中做同样的事情,只是相反。

关于ios - 无法通过 heightForRowAt 获取 TableView 中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277979/

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