18

私はしばらくiOS 7で構築してきましたが、まだ解決していません。ストーリーボードで作成され、標準で表示される自動レイアウトが有効になっているビューがいくつかありますUINavigationController。大部分は問題ありませんが、半透明度を に設定しない限り、 に基づくものはUICollectionView常にナビゲーション バーの下に配置されNOます。トリックを試してみましたedgesExtendedが、解決していないようです。半透明性をオフにしてもかまいませんが、きれいに解決したいと思います。

4

5 に答える 5

46

参考までに、UICollectionView がビュー コントローラーの階層のルート ビューであり、ビュー コントローラーがautomaticallyAdjustsScrollViewInsetsYES (これが既定値) に設定されている場合、contentInset は自動的に更新されます。

ただし、scrollview (または tableview/collectionview/webview btw) がビュー コントローラーの階層の最初のビューである場合にのみ、scrollview の 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 に答える
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 に答える