我有一个UITableViewController。在viewDidLoad中,我设置了rowHeight:
self.tableView.rowHeight = 43;
但是在cellForRowAtIndexPath中,我检查了单元格的高度:
NSLog(@"bounds: w = %f, h = %f", cell.bounds.size.width, cell.bounds.size.height);
这打印高度为44,宽度为320.任何人都知道为什么打印高度为44而不是43?
谢谢!
答案 0 :(得分:4)
简单地说,这两件事是相互独立的。
在rowHeight
对象中设置UITableView
时,您将告诉它如何呈现表格。 rowHeight
的默认值为44。
创建UITableViewCell
对象时,作为UIView
的子类,它有自己的默认frame
和bounds
,其中包含height
(和width
)。 height
的默认值也恰好等于44。
您出现混淆是因为您创建了一个UITableViewCell
对象,并且您希望它height
等于rowHeight
对象中的(非默认)UITableView
属性。怎么样?它刚刚出现!
与所有UIView
一样,在某些内容出现并明确更改其height
之前,其height
不会发生变化。
答案 1 :(得分:3)
1。 不要忘记UITableView分隔符(separatorStyle属性);)
它的高度为1像素。
为普通风格的tableView设置self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone
,您将看到预期值!
Grouped TableView将始终具有分隔符,并将按1 px进行调整。
2。 (提示)使用cell.contentView.frame(或bounds)属性而不是cell.frame(或bounds)
答案 2 :(得分:0)
你有:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
无论如何,您都可以实现此方法返回43。您还可以根据自己的心灵内容进行自定义。这就是为什么它将UITableView作为其第一个参数。您可以使用同一个委托拥有多个UITableView。