18

我已经在 iOS 7 上构建了一段时间,但我还没有解决这个问题,我有许多启用了自动布局的视图,它们是在 Storyboard 中创建的,并以标准UINavigationController. 大多数都很好,但基于UICollectionView总是将自己放在导航栏下,除非我将半透明设置为NO. 我已经尝试了这个edgesExtended技巧,但这似乎并没有解决它,我不一定介意关闭半透明,但我想更清洁地解决它。

4

5 回答 5

46

仅供参考,如果您的 UICollectionView 是视图控制器层次结构中的根视图,并且您的视图控制器已automaticallyAdjustsScrollViewInsets设置为 YES(这是默认设置),则 contentInset 应自动更新。

但是,仅当您的滚动视图(或 tableview/collectionview/webview btw)是其视图控制器层次结构中的第一个视图时,滚动视图的 contentInset 才会自动更新。

我经常在我的层次结构中首先添加一个 UIImageView 以获得背景图像。如果这样做,则必须在 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;

}
于 2014-08-17T18:45:16.277 回答
34

我之前遇到过这个问题,只需将集合视图的边缘插入设置为上边距:

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

其中 topMargin 是导航栏的大小,或者您希望集合开始滚动的任何点。

这样,您的收藏视图将在导航栏下方开始滚动,同时它将填满整个屏幕,如果您的导航栏是半透明的,您将看到它。

于 2013-09-19T13:41:20.047 回答
7

我在 ios 11 之后遇到了这个问题,只需将 UICollectionView 的 contentInsetAdjustmentBehavior 设置为never

self.collectionView.contentInsetAdjustmentBehavior = .never
于 2018-04-11T13:27:42.353 回答
3

我正在使用 swift 和 xcode 7.3.1。我通过转到故事板并选择我的导航控制器然后取消选中“扩展边缘”“在顶部吟游诗人下”来解决它。

于 2016-09-12T02:07:38.610 回答
0
-(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;

}
于 2016-08-24T01:48:48.363 回答