Senario A:
如果我在cellForRowAtIndexPath
中设置标签内容,则正确调整单元格的大小。
Senario B: 如果我在单元格中更改自定义操作中的文本内容,则单元格大小不会更改。(我确实调用setNeedsLayout + layoutIfNeeded)
如何解决这个问题?
编辑:
1)我已经设定,
myTableView.estimatedRowHeight = 71.0
myTableView.rowHeight = UITableViewAutomaticDimension
2)我已正确添加了自动布局约束。
答案 0 :(得分:5)
我遇到了这个问题,我的问题是我将内容限制在self
(UITableViewCell
)而不是self.contentView
(contentView
OF细胞)。希望这可以帮助那些已经用代码构建其单元格的其他人!
答案 1 :(得分:4)
更改单元格的文本后,只需重新加载该特定单元格或只需调用mainTableView.reloadData()
。
重新加载该单元格 -
//indexPath is indexPath of cell you just changed label of
mainTableView.reloadRows(at: indexPath, with: .automatic)
答案 2 :(得分:3)
答案 3 :(得分:1)
首先,我并不明确知道你对UITableViewCell
的行动是什么。所以,我假设我在UITableViewCell
选择中这样做。
以下答案仅适用于iOS 9及以上版本
但是,出于某种原因,它无法在 iOS 8 中进行,直到滚动。所以,我将更新iOS 8的答案。
我看到您在项目中使用了UITableView
' estimatedRowHeight
和rowHeight
。所以,
请检查以下
UITableView
estimatedRowHeight
和rowHeight
包含在viewDidLoad()
UILabel
行设置为0 如果还包含其他组件,请确保仅包含底部和顶部空间限制或顶部空间到容器边距和底部空间到容器边距。
所以,在您尝试此示例项目之前,还没有说什么,@Rikh
回答仍然有效。可能是你走错了方向。这是解决方案。请按照我说的步骤进行操作,如果没有成功,请告诉我。您可能需要共享导致的示例项目。
示例演示 - DynamicCellDemo
iOS 8更新:为iOS 8用户更新以下代码
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 9, *) {
// do nothing
} else {
tblDynamic.reloadData()
}
}
答案 4 :(得分:1)
在我的情况下,在同一单元格中,我在左上角有一个imageView,带有“容器中垂直居中”约束和一个“顶部空间容器”约束。
显然,要满足这两个约束,单元格的高度必须等于:
(imageView的高度/ 2)+(顶部空间容器约束的长度)。
这个高度不足以容纳标签文本,因此我的标签只有1行可见。
在删除imageView顶部约束后,所有约束都移到了正确的位置,在我的情况下,我希望图像居中,如果图像必须留在左上角,则必须取下“垂直居中”。容器”约束。
我希望这可以帮助某人。
答案 5 :(得分:0)
您可以做的是为来自顶部,底部,前导和尾随的所有边的单元格中的标签设置AutoLayout约束。然后将以下UITableViewDelegate方法添加到您的类中。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 500
}
这将完成这项工作。现在,表视图单元格中的内容会自动调整单元格的高度。
答案 6 :(得分:0)
尝试使用此功能:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
答案 7 :(得分:-2)
在viewDidLoad()
中添加以下内容-(void)viewDidLoad{
[super viewDidLoad];
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
}