iPhone + UITableView + 行高

Posted

技术标签:

【中文标题】iPhone + UITableView + 行高【英文标题】:iPhone + UITableView + row height 【发布时间】:2010-12-10 18:48:21 【问题描述】:

我正在使用以下代码设置UITableView 的行高

[tableView setRowHeight: 100.00];

我在UITableView 中使用单行作为分隔符。

即使设置了上面的高度,行的高度也不会改变。

【问题讨论】:

设置行高时很重要 【参考方案1】:

我就是这样做的,这里tableobj 在我的应用程序中只是UITableView 对象。

- (void)viewDidLoad

    [super viewDidLoad];
    [tableObj setRowHeight:100.0f];

或在numberOfRowsInSection: 中处理类似:

- (NSInteger)tableView:(UITableView *)tblView numberOfRowsInSection:(NSInteger)section 
    [tableObj setRowHeight:100.0f];
    return [soandso count]; // soandso is my object

因为在设置数据源之前设置了rowHeight。它对我有用(对于相同的行高)。

【讨论】:

【参考方案2】:

你应该实现

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

委托方法。并在那里返回 100.0。

【讨论】:

小心。 Pratik 没有说他想要每行的高度。行数很多时 heightForRowAtIndexPath 可能会很昂贵。 这是正确但昂贵的答案:有一件事我不明白。为什么Apple坚持要知道RowHeight?为什么不直接从 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 询问行高并从中获取高度? 如果所有单元格的行高相同,设置 rowHeight 比使用这个委托方法效率高很多。【参考方案3】:

如果所有行的高度相似,则应避免使用heightForRowAtIndexPath 并使用rowHeight 属性。根据文档:

使用 tableView:heightForRowAtIndexPath: 代替 rowHeight 会影响性能。每次显示表视图时,它都会在委托上为其每一行调用 tableView:heightForRowAtIndexPath:,这可能会导致表视图具有大量行(大约 1000 或更多)时出现严重的性能问题。

在 UITableViewController 子类中可以这样做,例如,在 viewDidAppear 方法中(UITableViewController 有对 tableView 的引用):

self.tableView.rowHeight = 79.f;

【讨论】:

【参考方案4】:

更好更简洁的解决方案是实现委托功能(如果你的 UITableView 有很多行,这可能不是最好的......)。

另外,认为 UITableVieCell 是 UIView 所以你可以先改变它们的高度......

代表在 iPhone 开发中非常强大,这里是 UITableViewDelage:

http://developer.apple.com/iphone/library/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

你也可以改变 indentForRow, displayCellForRow, heightForRow,edit stuff.....

【讨论】:

【参考方案5】:

当单元格首次显示时,行高被烘焙到单元格中。

你在设置数据源之前设置了 UITableView#rowHeight 吗? 如果没有,请这样做。 如果由于某种原因你不能,你的另一个选择是在设置行高之后调用 UITableView#reloadData。

【讨论】:

这为我解决了。设置 rowHeight before 我设置数据源完全解决了这个问题。重新加载数据也是如此。谢谢emp。【参考方案6】:

我不认为UITableView中有这样的方法...

相反,您可以使用属性 rowHeight... 尝试, tableView.rowHeight =100;

【讨论】:

其实在 UITableViewDelegate 里面。 属性只是访问 Getter/Setter 的更简单方法。做tableView.rowHeight = 100,和[tableView setRowHeight:100]完全一样。当你合成属性时,会自动创建 getter/setter。

以上是关于iPhone + UITableView + 行高的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 自动调整行约束在 iPhone 6Plus 上神秘地打破

iOS UITableView 解决估算行高和指定行高的矛盾

通用故事板 UITableview 行高

UITableViewCell 内 UITableView 的动态行高

UITableView 删除行减少表格行高

UITableView 估计行高动态类型