iPhone:更改来自 NIB 的 UITableViewCell 的高度
Posted
技术标签:
【中文标题】iPhone:更改来自 NIB 的 UITableViewCell 的高度【英文标题】:iPhone: change height of UITableViewCell coming from a NIB 【发布时间】:2010-04-30 11:45:49 【问题描述】:我有一个自定义 UITableViewCells 的 UITableView,如下所示:
[ CELL 0
[ description ]
[ dynamic content type 1 ]
[ dynamic content type 2 ]
[ dynamic content type 3 ]
]
[ CELL 1
[ description ]
[ dynamic content type 1 ]
[ dynamic content type 3 ]
]
[ CELL 2
[ description ]
[ dynamic content type 2 ]
]
[ ... and so on ... ]
由于 [description] 部分已经相当复杂,我决定使用 Interface Builder 来设计它,并使用 [cell addSubview:...]
以编程方式在 cellForRowAtIndexPath
中添加 [动态内容]。我现在的问题是,我在 Interface Builder 中为我的自定义 UITableViewCell 设置了默认高度,但是当我添加我的 [动态内容](可能介于 0..3 之间)时,我有不同高度的不同单元格。
当然要计算总高度并更改heightForRowAtIndexPath
中的返回值,但是如何更改我的实际cell
的高度值(从具有固定高度的nib 文件加载) ?
【问题讨论】:
【参考方案1】:为什么不更新cellForRowAtIndexPath
中单元格的边界(您已经添加了动态内容)?
【讨论】:
TableView Widget 将在获取单元格之前为每个单元格分配高度。这是为了确定滚动长度和我想象的其他一些性能考虑。如果您只是设置边界,则高度将适用于一个,但随后它将踩在其余单元格的顶部。 @Brian 我认为这就是 Stefan 在他最后一句话中的意思。他已经在计算正确的高度并在委托方法heightForRowAtIndexPath
中返回它。他担心牢房的界限。我不确定 UITableView 是否会修改单元格的大小。它确实修改了框架在-[UITableView layoutSubviews]
中的原点,因为它必须排列单元格。
其实我之前用setFrame试过了,但是没用。我可能同时搞砸了其他事情。我现在用 setFrame 和 setBounds 试了一下,两者都有效 :-) Muchas gracias.
哈,是啊,显然我今天上午的阅读能力有点模糊!【参考方案2】:
您要计算并返回以下值:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
需要注意的一点是,这将在启动时为您视图中的每一行调用,因此请注意您创建的内容以计算大小。
另一个选项,在实现中可能更标准,是做一个分组的 TableView 小部件,在这里你称之为单元格的部分,然后每一行都是描述或动态内容。如果你的 ascii 绘图是我的设计规范,我会这样做,但我猜你还有更多的东西要花掉。
【讨论】:
以上是关于iPhone:更改来自 NIB 的 UITableViewCell 的高度的主要内容,如果未能解决你的问题,请参考以下文章
目标 C:使用代码实现导航控制器时如何在 NIB 中添加工具栏
如何将文本包装在 Iphone 的 UITable 单元格中?