UITableView单元高度设置生命周期

时间:2011-09-04 20:41:21

标签: iphone uitableview

试图了解何时设置了单元格高度。 我有一个在布局中创建的UITableView,而不是代码。

然后:

#define TABLE_VIEW_ROW_HEIGHT   100.0

其次是:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Setting row height");
    return TABLE_VIEW_ROW_HEIGHT;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Row height: %f", tableView.rowHeight);
    // ... other happy stuff that does not change row height but could sure use the real row height

最后一个NSLog报告44而不是100.这意味着该方法中需要获取行高的代码不使用实际高度。

我已经验证了

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

之前运行
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

因此,行具有所需的大小,而不是默认大小44。

我是否需要在其他地方明确设置高度?

在进行一些研究后编辑:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
当不是所有行都具有相同的高度时,

...更适合用于设置行的高度。我错误地使用它将所有行设置为相同的高度。

正确的方法是致电

the_tableview.rowHeight = TABLE_VIEW_ROW_HEIGHT;

...来自viewDidLoad之类的地方。我实际上做到了(代码省略)但它没有用。今晚我意识到这是图形布局工具的另一个例子...我忘了为UITableView连接IBOutlet ......所以,我的代码什么都没做,整个tableview仍然保持默认高度44。这就是我从NSLog中获得44分的原因。

1 个答案:

答案 0 :(得分:4)

在您的代码中,您在tableView上调用rowHeight而不在IndexPath上的特定行调用。这就是为什么要获得默认值为44的原因。如果要更改默认值,则可以在表的大小检查器中执行此操作。如果所有行具有相同的高度,则更改默认值会更好。如果有不同高度的行,则必须为高度不同的行实现heightForRowAtIndexPath。

您已在代码中定义TABLE_VIEW_ROW_HEIGHT,在这种情况下,您还必须通过为其分配定义的TABLE_VIEW_ROW_HEIGHT名称来设置tableView.rowHeight。