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;

}