размер ячейки табличного представления зависит от размера устройства предварительного просмотра в раскадровке

Я запускаю свое приложение на своем iPhone 6 plus с шириной экрана 414 точек, если я установил устройство предварительного просмотра на iPhone 7 с шириной экрана 375 точек, при первой загрузке таблицы я распечатал размер таблицы в viewdidload и она имела ширину 414, но все ячейки таблицы имели ширину 375, после прокрутки вверх и назад ширина изменилась на 414. Протестировано в нескольких UITableViewController, все дали одинаковый результат.

Мои вопросы:

Почему размер ячейки табличного представления зависит от размера устройства предварительного просмотра?

как сделать так, чтобы ячейка имела правильный размер при первой загрузке?

tableView.layoutIfNeeded (), tableView.layoutSubViews () не работают.


person jc127    schedule 06.08.2017    source источник


Ответы (2)


Tableview имеет правильный размер 414 (размер моего устройства), но каким-то образом размер ячейки является размером смоделированных показателей, после пары месяцев исследований я пришел к следующему ответу:

В моем классе ячеек переопределите awakeFromNib(), установите frame.size.width в UIScreen.main.bounds.width, затем вызовите layoutIfNeed()

person jc127    schedule 17.08.2017

Каждый раз, когда представление загружается из раскадровки, оно изначально будет иметь ТОЧНО тот размер, который был указан в раскадровке, а затем, когда он добавлен в иерархию представлений, его рамка будет скорректирована (либо с помощью Autolayout, либо с помощью вашего пользовательского кода).

Итак, в вашем случае, когда ячейка сначала загружается из раскадровки, она будет иметь ширину 414 точек (предположительно, ваш tableView имеет такую ​​же ширину, что и контроллер представления), но когда он помещается в фактическую иерархию просмотра, он будет изменен соответственно (375pt, что равно ширине вашего tableview).

person hoang Cap    schedule 06.08.2017