2015-09-21 2 views
8

Настройка estimatedRowHeight и rowHeight из UITableView делает вид таблицы рассчитанным на правильную высоту каждой ячейки. Это работает как шарм, пока я не использую классы размеров. Кажется, что все вычисления выполняются для класса Any/Any size, а более крупный шрифт применяется позже. В результате высота ячейки неправильно вычисляется, и метка не подходит.Динамическая высота UITableViewCell не работает с классами размеров

Вот мой код:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableView.estimatedRowHeight = 50 
     self.tableView.rowHeight = UITableViewAutomaticDimension 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 3 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Reuse", forIndexPath: indexPath) as! MyTableViewCell 
     println("Label font size: \(cell.myLabel.font)") // it prints (...)font-size: 11.00pt for all the size classes 
     return cell 
    } 
} 

Layout выглядит следующим образом: Table view layout

И использование размерных классов является: Font size classes

Теперь, когда я открываю приложение на iPhone выглядит как ожидаемый. Но на iPad ячейки не будут должным образом изменены. Фактически они изменяются в соответствии с текстом, если размер шрифта 11pt вместо 40pt.

Вопрос: Как я могу заставить вычисления выполнять после применения классов размеров?

Я уже пробовал трюк с переопределяющим набором признаков, как предлагается в: https://stackoverflow.com/a/28514006, но это не сработало. Я имею в виду, класс класса был правильно прочитан (Regular/Regular), но размер шрифта был еще 11pt.

Вы можете скачать этот простой проект от Github: https://github.com/darecki/TableViewTest

Скриншоты:

  • iPhone 4s:

enter image description here

  • IPad 2:

enter image description here

  • IPad 2 после вызова tableView.reloadData():

enter image description here

Edit: форматирование, добавлена ​​GitHub ссылку.

+0

Устанавливается в 0. Я добавил скриншоты, чтобы показать, как он себя ведет. –

+0

установить шрифт ярлыка в awakefromnib вашей пользовательской ячейки() на основе типа устройства – dopcn

+0

вы можете поделиться своим примером кода? – Johnykutty

ответ

-3

Установите предпочтительную максимальную ширину на этикетке в Interface Builder -> инспектор размеров. Это решает проблему для меня. Также убедитесь, что количество строк равно 0.

+0

Это также не работает для меня (Xcode 6.4, iOS 8.4.1). Кроме того, предпочтительная максимальная ширина макета не может применяться для разных классов размеров, поэтому какое значение вы бы выбрали? –

+0

Вы устанавливаете ширину на максимальную метку. В моем случае это 300 (по 10 точек на каждой стороне ячейки.Это, кажется, сортирует проблему для меня. – Tander

+2

Это действительно не помогает, поскольку она не соответствует ширине iPad. 300 может быть в порядке для режима портрета iPhone. Он не работает с классами размера. –

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