2015-06-27 3 views
1

У меня есть функция heightForRowAtIndexPath вычислить высоту ячейки, имеющей два текстовых поля динамического текстаЯчейка UITableView дает разную ширину. Как это решить?

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier(self.kkCellIdentifier) as! NibTableViewCell 
    cell.updateConstraints() 
    let width = cell.contentView.frame.width 
    //use width to calculate the height 
} 

Я бегу это на iPhone 6 тренажере.

В портретных:

я получаю ширину ячейки иногда как 375 (wrong- это на самом деле ширина рамки Tableview), и иногда как 320 (правильный)

В пейзаже:

я получаю клетки ширина иногда как 320, а иногда и 659 (правильный)

Почему это так? Это ошибка?

Как это решить?

+0

Можно использовать 'let cell = tableView.cellForRowAtIndexPath (indexPath) как! NibTableViewCell' вместо 'let cell = tableView.dequeueReusableCellWithIdentifier (self.kkCellIdentifier) ​​как! NibTableViewCell' – imas145

+0

Я уверен, что 375 правильная ширина для 6 ... 320 правильная для 5 и 4 ... – nhgrif

+0

@nhgrif 375 - фактически общий размер кадра в виде таблицы. 320 - фактическая ширина содержимого ячейки, из-за отступов, которые она помещает в правую и левую сторону экрана для лучшей видимости. И я получил сбой с ошибкой (lldb), выполнив 'tableView.cellForRowAtIndexPath (indexPath) как! NibTableViewCell' – Imran

ответ

1

Frame вашей UITableViewCell будет установлен после вызова tableView:cellForRowAtIndexPath: так изначально фрейм, если у вас есть Nib для пользовательской ячейки может быть по умолчанию 320, если вы делаете это программно может быть равен нулю. Я рекомендую вам использовать Autolayout, чтобы установить ограничения вашего пользовательского UITableViewCell, это можно сделать, используя как Interface Builder, так и программно. Вот Apple's guide to Autolayout

+0

Я использую autolayout для tableViewCell через Interfacebuilder. – Imran

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