2010-03-09 76 views
0

我有一个UITableViewController。在viewDidLoad中我设置的rowHeight:为什么UITableViewCell比行高高1px?

self.tableView.rowHeight = 43; 

但随后的cellForRowAtIndexPath,我检查单元格的高度:

NSLog(@"bounds: w = %f, h = %f", cell.bounds.size.width, cell.bounds.size.height); 

这将打印44的高度和320宽度任何人都知道为什么会打印44而不是43的高度?

谢谢!

回答

4

简而言之,这两件事情是相互独立的。

当您在您的UITableView对象中设置rowHeight时,您告诉它如何渲染表格。为rowHeight的默认值是44。

当你创建一个UITableViewCell对象,为UIView一个子类,它有自己的默认framebounds,其中包括一个height(和width)。为height的默认值也恰好等于44

你产生了困惑,因为你已经创建了一个UITableViewCell对象,你期望它有一个height等于(不是默认的)在你UITableView对象rowHeight属性。它怎么样?它刚刚成立!

和所有UIView一样,直到出现某种情况并明确地改变其height,其height不会改变。

+0

不知道我理解。我明确地将rowHeight设置为43.因此,我认为单元格的默认高度应该是43,因此它适合于一行。如果我想要一个非常紧凑的桌子,并将rowHeight设置为10,该怎么办?显然不应该在43的高度创建单元格。 – Tony 2010-03-09 20:54:42

+1

您的UITableView和您正在创建的UITableViewCell之间没有任何关联。请注意所有委托方法如何使用UITableView参数。这是你*可以自定义单元格的创建方式。 – 2010-03-09 22:27:52

0

你有一个:

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

您可以实现此方法以返回43不管是什么。你也可以定制你的内心。这就是为什么它需要一个UITableView作为它的第一个参数。你可以有多个使用相同委托的UITableViews。

+0

不,我没有这样的功能 – Tony 2010-03-09 20:52:09

3

1. 不要忘了UITableView的分离器(separatorStyle属性);)

它有1米像素的高度。

设置self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone为简单样式的tableView,你会看到预期的价值!

分组的TableView将始终有分隔符,并将被调整1 px。

2. (TIP)使用cell.contentView.frame(或范围)属性,而不是cell.frame(或范围)