Подпрограммы 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], чтобы получить "правильные" значения для подсмотров.