2010-03-09 1 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

Проще говоря, две вещи не зависят друг от друга.

Когда вы установили rowHeight в свой объект UITableView, вы сообщаете ему, как визуализировать таблицу. Значение по умолчанию для rowHeight является 44.

При создании UITableViewCell объекта, как подкласс UIView, он имеет свой собственный по умолчанию frame и bounds, который включает в себя heightwidth). Значение по умолчанию для height также просто бывает равный 44.

возникает Ваша путаница, потому что вы создали UITableViewCell объект и вы ожидали иметь height равно (не по умолчанию) rowHeight свойства в вашем UITableView объекте. Как это можно? Это только что появилось!

Как и все UIView s, пока что-то не появится и явно изменит его height, его height не изменится.

+0

Не уверен, что я понимаю. Я явно устанавливаю rowHeight равным 43. Поэтому я думаю, что высота по умолчанию ячейки должна быть 43, поэтому она вписывается в строку. Что, если бы я хотел действительно компактную таблицу, и я установил rowHeight на 10? Ячейки, очевидно, не должны создаваться на высоте 43. – Tony

+1

Нет никакой связи между вашим UITableView и созданным вами UITableViewCell. Обратите внимание, как все методы делегата принимают параметр UITableView. Это так * вы * можете настроить способ создания ячеек. –

0

У вас есть:

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

Вы можете реализовать этот метод, чтобы вернуть 43 независимо от того, что. Вы также можете настроить контент своего сердца. Вот почему в качестве первого аргумента требуется UITableView. У вас может быть несколько UITableViews, использующих один и тот же делегат.

+0

нет, я не имею эту функцию – Tony

3

1. Не забывайте о UITableView сепараторе (separatorStyle собственность);)

имеет 1 высоту пикс.

Комплект self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone для таблиц в обычном стилеView, и вы увидите ожидаемое значение!

Сгруппированный TableView всегда будет иметь разделитель и будет отрегулирован на 1 px.

2. (наконечник) Используйте cell.contentView.frame (или оценку) свойство вместо cell.frame (или оценка)

Смежные вопросы