2017-12-11 15 views
1

私はしたい透明なナビゲーションバーを持っているので、コレクションビューの内容は画面の最上部(ステータスバーの最上部)から開始するので、私は魔法の数字を避けたいと思いますiPhone Xと他のiPhone。CollectionViewコンテンツをナビゲーションバーに表示

私は何を試しましたか?

collectionView.contentInset = UIEdgeInsets(top: -64, left: 0, bottom: 0, right: 0)

が、それはエレガントな解決策ではありません、それはインセットが

どれでもきれいなソリューション

を増加させる必要があるiPhone Xのために正しくないのか?あなたがインターフェイスビルダーを使用している場合

ターゲットのiOS 10と11

+0

set UICollectionView top 0 with Main View。 contentInsetを設定する必要はありません。 – Ujesh

答えて

1

、これは簡単にsuperviewから0 constantないsafe areaを持つように、コレクションビューの上部スペースの制約を設定することによって行うことができます。

 view.addSubview(collectionView) 
     collectionView.translatesAutoresizingMaskIntoConstraints = false 
     collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true 
     collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true 
     collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true 
     collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true 

このアプローチはiOS11でも機能しますが、iOS10ではクラッシュすると考えてください。これは、引き続き安全な場所を使用しているためです。安全な場所はiOS10では使用できません。 Xcode 9とインタフェースビルダーを使用すると、安全領域からレイアウトガイドへの自由な変換が可能になります。私のプロジェクトで

+0

コードで可能ですか?私は 'SnapKit'を使用していますが、ネイティブコードレイアウトシステムを使用することができます – iOSGeek

+0

私は決してスナップキットを使用しませんでしたが、自動レイアウトAPIを使用しているようなものかもしれません。 – Andrea

1

私はこのようにそれを扱わ:

if UIDevice.current.userInterfaceIdiom == .phone && max(UIScreen.main.bounds.size.width, UIScreen.main.bounds.height) == 812 { 
     //iPhone X 
     self.tableView.contentInset = UIEdgeInsets(top: -88, left: 0, bottom: 0, right: 0) 
    }else { 
     self.tableView.contentInset = UIEdgeInsets(top: -68, left: 0, bottom: 0, right: 0) 
    } 
1

は、ナビゲーションバーの下に行くためにコレクションビューを防ぐためにUICollectionViewを含むUIViewControllerでこれを追加します。例えば。 viewDidLoad方法で:4

self.edgesForExtendedLayout = UIRectEdge.bottom 

スウィフトあなたも、あまりにもUITabBarsの下に行くためにコレクションビューを防ぐためにedgesForExtendedLayout = []を設定することができます。

関連する問題