Ios UITableViewCell和在单元格中重新定位UILabels

Ios UITableViewCell和在单元格中重新定位UILabels,ios,uitableview,autolayout,autoresizingmask,Ios,Uitableview,Autolayout,Autoresizingmask,我有一个UITableView,我有不同高度的单元格。我已经覆盖了索引路径中的高度,在调用[lb sizeToFit]后,我通过确定UILabel高度来计算正确的高度。我得到了每个单元格的正确高度,但我对重新定位UILabel的最佳位置r=有点模糊 我曾尝试将它们重新定位到cellforrowatinexpath中,但这似乎不起作用。所以,在我走得太远之前,这是正确的地方吗?从表面上看,它不起作用 问题:cellforrowatinexpath是调整控件大小和移动控件的正确位置吗 谢谢您的帮助。

我有一个
UITableView
,我有不同高度的单元格。我已经覆盖了索引路径中的
高度,在调用
[lb sizeToFit]
后,我通过确定
UILabel
高度来计算正确的高度。我得到了每个单元格的正确高度,但我对重新定位UILabel的最佳位置r=有点模糊

我曾尝试将它们重新定位到
cellforrowatinexpath
中,但这似乎不起作用。所以,在我走得太远之前,这是正确的地方吗?从表面上看,它不起作用

问题:
cellforrowatinexpath
是调整控件大小和移动控件的正确位置吗


谢谢您的帮助。

创建您自己的
UITableViewCell
子类,并覆盖
layoutSubviews
。记得调用
[超级布局子视图]
。然后,无论显示多少内容,都要正确布局单元格。(假设单元格将获得正确的帧)


heightforrowatinexpath:
中,您需要根据单元格内容的布局方式执行相同的计算。

确定标签需要的大小,并从表委托方法返回该高度


在单元中,将标签固定到superview(单元内容视图)的边缘。您可以使用自动调整大小的遮罩(灵活的宽度+高度)或自动布局来实现这一点。在任何一种情况下,这都会使标签自动调整到正确的框架,而无需你做任何其他事情。

如果你能让autolayout工作,那么我认为@Wain有最好的主意。有时,布局对于autolayout来说可能太复杂,在这种情况下,您需要在代码中完成

代码在哪里?您在
cellforrowatinexpath:
中执行此操作的想法完全可以。请记住,单元格会以其他行剩余的任意状态退出队列,因此不应依赖初始条件。e、 g

UILabel *label3 = (UILabel *)[cell viewWithTag:100];
// give the subviews constant tags (not dependent on row for example)

if (/* this is a short cell, so the third label must be hidden */) {
    label3.alpha = 0.0;
}
// NOT DONE YET!
因为我们不知道label3在出列时的状态,所以我们必须覆盖所有条件,提供一个else块作为if块的补充

else {
    // it must be a taller cell
    // or else if, if there are other sizes of cells, etc.
    label3.alpha = 1.0;
}

这可能会非常复杂,您可能会发现在自己的UITableView子类中重新定位此布局逻辑更具可读性,这是@NickGalasso的好建议。

您真的需要吗?你在使用什么自动布局/调整大小?哈哈,这是个好问题。我的主要问题是在每个单元格中以UILabel显示文本。但是,由于每个单元格的文本长度不同,且UILabel的高度固定,因此单元格之间存在较大的空间。我需要在UILabel上调用sizeToFit以获得正确的高度,然后将UILabel下的其他控件向上移动,以便单元格正确显示…有意义吗?