IOS7: UICollectionView появляется под UINavigationBar
Я уже давно работаю над iOS 7, но я еще не решил, что у меня есть несколько просмотров с включенным автозапуском, которые были созданы в Storyboard и отображаются со стандартным UINavigationController
. Большинство из них в порядке, но те, которые основаны на UICollectionView
, всегда располагаются под навигационной панелью, если я не установил прозрачность на NO
. Я пробовал трюк edgesExtended
, но это, кажется, не решает его, я не обязательно отказываюсь от полупрозрачности, но я бы хотел его решить.
Ответы
Ответ 1
У меня была эта проблема раньше, просто установите крайние вставки вида коллекции с верхним краем:
[self.myCollectionVC.collectionView setContentInset:UIEdgeInsetsMake(topMargin, 0, 0, 0)];
Где topMargin - это размер панели навигации или любой другой момент, который вы хотите, чтобы коллекция начала прокрутку.
Таким образом, ваш просмотр коллекции начнет прокручиваться чуть ниже навигационной панели, и в то же время он заполнит весь экран, и вы увидите его, если ваша панель навигации полупрозрачна.
Ответ 2
FYI, если ваш UICollectionView является корневым представлением в вашей иерархии диспетчера представлений, а ваш контроллер вида имеет automaticallyAdjustsScrollViewInsets
установлен на YES (это значение по умолчанию), тогда содержимое набора должно обновляться автоматически.
Однако, scrollview contentInset обновляется только автоматически, если ваш scrollview (или tableview/collectionview/webview btw) является первым представлением в иерархии диспетчера своих представлений.
Я часто добавляю UIImageView сначала в свою иерархию, чтобы иметь фоновое изображение. Если вы это сделаете, вы должны вручную установить вставки в scrollview в viewDidLayoutSubviews:
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
CGFloat top = self.topLayoutGuide.length;
CGFloat bottom = self.bottomLayoutGuide.length;
UIEdgeInsets newInsets = UIEdgeInsetsMake(top, 0, bottom, 0);
self.collectionView.contentInset = newInsets;
}
Ответ 3
Я использую swift и xcode 7.3.1. Я решил это, перейдя на панель рассказов и выбрав мой навигационный контроллер, а затем сняв флажок "Расширять края" "Под верхними бардами".
Ответ 4
-(void) viewDidiLoad{
self.automaticallyAdjustsScrollViewInsets = NO;//added important
}
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
CGFloat top = self.topLayoutGuide.length;
CGFloat bottom = self.bottomLayoutGuide.length;
UIEdgeInsets newInsets = UIEdgeInsetsMake(top, 0, bottom, 0);
self.collectionView.contentInset = newInsets;
}