私はしばらくiOS 7で構築してきましたが、まだ解決していません。ストーリーボードで作成され、標準で表示される自動レイアウトが有効になっているビューがいくつかありますUINavigationController
。大部分は問題ありませんが、半透明度を に設定しない限り、 に基づくものはUICollectionView
常にナビゲーション バーの下に配置されNO
ます。トリックを試してみましたedgesExtended
が、解決していないようです。半透明性をオフにしてもかまいませんが、きれいに解決したいと思います。
5 に答える
参考までに、UICollectionView がビュー コントローラーの階層のルート ビューであり、ビュー コントローラーがautomaticallyAdjustsScrollViewInsets
YES (これが既定値) に設定されている場合、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;
}
私は以前にこの問題を抱えていました.コレクションビューのエッジインセンツに上マージンを設定するだけです:
[self.myCollectionVC.collectionView setContentInset:UIEdgeInsetsMake(topMargin, 0, 0, 0)];
topMargin は、ナビゲーション バーのサイズ、またはコレクションのスクロールを開始する任意のポイントです。
このようにして、コレクション ビューはナビゲーション バーのすぐ下でスクロールを開始し、同時に画面全体に表示され、ナビゲーション バーが半透明の場合に表示されます。
-(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;
}