Когда iPhone X используется ландшафтом, вы должны проверить safeAreaInsets, чтобы сделать подходящие большие желоба слева и справа. UITableView имеет новое свойство insetsContentViewsToSafeArea
(по умолчанию true), чтобы автоматически сохранять содержимое ячейки в безопасной области.
Я удивлен, что UICollectionView, похоже, не имеет ничего подобного. Я ожидал бы, что для просмотра коллекции с вертикальной прокруткой левая и правая стороны будут вставляться в безопасную область, когда в ландшафте (и, наоборот, просмотр горизонтальной прокрутки будет вставлен в случае необходимости в портрете).
Простейшим способом обеспечения такого поведения является добавление в контроллер представления коллекции:
- (void)viewSafeAreaInsetsDidChange {
[super viewSafeAreaInsetsDidChange];
UIEdgeInsets contentInset = self.collectionView.contentInset;
contentInset.left = self.view.safeAreaInsets.left;
contentInset.right = self.view.safeAreaInsets.right;
self.collectionView.contentInset = contentInset;
}
... при условии, что contentInset.left/right обычно равно нулю.
(ПРИМЕЧАНИЕ: да, для UICollectionViewController, который должен быть self.view.safeAreaInsets
; в то время, когда это вызывается, изменение на safeAreaInsets
странно еще не распространяется на self.collectionView
)
Я что-то упустил? Этот шаблон достаточно прост, но он действительно необходим теперь для каждого вида коллекции, который касается края экрана. Кажется странным, что Apple не предоставила что-то, чтобы включить это по умолчанию.