Подпрограммы UITableViewCell отображают неверную ширину при использовании классов размера

По какой-то причине при использовании классов размера в xcode 6 я получаю неправильную ширину для subviews в моей ячейке. У меня есть UIImageView с автозапуском для калибровки (константа: 10 для верхнего, L/R, внизу).

При вызове из tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!):

println("w: \(cell.mapSnapshotImageView.bounds.size.width) h: \(cell.mapSnapshotImageView.bounds.size.height)")

Я всегда получаю:

w: 580.0 h: 80.0

Даже если он должен быть w: 300.0 h: 80.0 на основе моей ячейки 320x100 на iPhone 5S.

Все отображается правильно, но я хочу использовать ширину subview для некоторых вычислений для других subviews. Любые идеи относительно того, почему это происходит? Отчет об ошибках или работающий в соответствии с проектом?

EDIT:

Эта проблема относится только к ячейкам, которые загружаются изначально. Когда ячейки повторно используются, проблема не возникает. println вывод на повторно используемые ячейки:

w: 300.0 h: 80.0

Ответ 1

Я также столкнулся с этой проблемой. Когда вы динамически изменяете размер представлений, подвиды должны соответствующим образом обновлять их значения. Вы указываете значения до их обновления.

Моя работа заключалась в том, чтобы ссылаться на значения после их обновления. В этом случае это было в viewDidAppear(). Надеюсь, это пригодится. Я потратил некоторое время, пытаясь понять это.

Ответ 2

Вызовите cell.layoutIfNeeded() в willDisplayCell:forRowAtIndexPath перед обращением к фреймам. Это сделает трюк.

Ответ 3

Вы можете попробовать в методе layoutSubviews(), после вызова [cell layoutIfNeeded], чтобы получить "правильные" значения для подсмотров.