Размер кадра UICollectionView больше размера UIScreen - PullRequest
0 голосов
/ 13 апреля 2019

В viewDidLoad функция моего UIViewController Я звоню

print("\(UIScreen.main.bounds.size.width) \(collectionView.frame.width)")

и он печатает

320.0 375.0

Как этовозможный?UICollectionView должен иметь такую ​​же ширину, мб меньше, но определенно не больше

Настройки этого вида в раскадровке:

enter image description here

каждыйограничение установлено как

enter image description here

Так что я тестирую его на iPhone SE Simulator, но в раскадровке у меня iPhone 8.

enter image description here

enter image description here

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

Ширина iPhone 8 составляет 375 точек, а iPhone SE составляет 320:

enter image description here

Обновление

Кажется, viewDidLoad возвращает размеры вашего последнего выбранного устройства в раскадровке (довольно некрасиво)

Так что, чтобы получить правильные данные о представлениях, я должен получить размеры в viewDidAppear

В Android, если размер какого-либо вида еще не доступен (вид еще не был завышен), он просто возвращает нули (ширина == 0, высота == 0), но в iOS вы получаете ширину и высоту из Xcode Storyboaво время выполнения ... Действительно?

1 Ответ

0 голосов
/ 13 апреля 2019

Когда вы создаете экземпляр контроллера представления из раскадровки, размер его представления будет таким, какой в ​​данный момент установлен на раскадровке. Он будет иметь тот же размер, что и экран, после того как он был добавлен в иерархию представлений. viewDidLoad вызывается перед добавлением представления, поэтому оно будет иметь тот же размер, что и на раскадровке. Вы можете получить размер, который отображается внутри методов: viewWillApear, viewDidAppear и viewDidLayout. Просто помните, что эти методы могут вызываться несколько раз.

...