it-swarm.com.ru

iOS7: UICollectionView появляется под UINavigationBar

Я уже некоторое время собираюсь на iOS 7, но мне еще предстоит решить эту проблему, у меня есть несколько представлений с включенной автоматической раскладкой, которые были созданы в раскадровке и отображаются со стандартной UINavigationController. Большинство в порядке, но те, которые основаны на UICollectionView, всегда размещаются под панелью навигации, если я не установил прозрачность на NO. Я попробовал трюк edgesExtended, но это, похоже, не решает его, я не обязательно возражаю против выключения прозрачности, но я бы хотел решить его чище. 

18
Nicholas Smith

У меня была эта проблема раньше, просто установите краевые отступы представления коллекции с верхним полем:

 [self.myCollectionVC.collectionView setContentInset:UIEdgeInsetsMake(topMargin, 0, 0, 0)];

Где topMargin - это размер навигационной панели или любой другой точки, в которой вы хотите, чтобы коллекция начала прокручиваться.

Таким образом, представление вашей коллекции начнет прокручиваться чуть ниже панели навигации, и в то же время заполнит весь экран, и вы увидите его, если ваша навигационная панель полупрозрачна.

34
Antonio MG

К вашему сведению, если ваш UICollectionView является корневым представлением в иерархии вашего контроллера представления, и для вашего контроллера представления для automaticallyAdjustsScrollViewInsets установлено значение YES (это значение по умолчанию), тогда contentInset должен обновляться автоматически. 

Тем не менее, contentInset scrollview обновляется автоматически только в том случае, если ваш scrollview (или кстати tableview/collectionview/webview) является первым представлением в иерархии контроллера их представления.

Я часто добавляю UIImageView первым в моей иерархии, чтобы получить фоновое изображение. Если вы сделаете это, вы должны вручную установить Edge вставки в 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;

}
45
BFar

У меня была эта проблема после ios 11, просто установите для contentInsetAdjustmentBehavior UICollectionView значение никогда:

self.collectionView.contentInsetAdjustmentBehavior = .never
5
Davide Gianessi

Я использую Swift и Xcode 7.3.1. Я решил это, перейдя на раскадровку и выбрав мой Навигационный контроллер, а затем сняв флажок «Расширить края» «Под верхними планами».

1
Saeid Farivar
-(void) viewDidLoad{
    [super viewDidLoad];
    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;

}
0
Snail