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 解决估算行高和指定行高的矛盾