导航栏下的CollectionView内容

时间:2017-12-11 12:48:58

标签: ios swift uicollectionview uinavigationbar iphone-x

希望 collectionView的内容从屏幕的最顶部(状态栏的顶部)开始,因为我有透明导航栏,我想避免使用魔术数字,它应该可以使用iPhone X和其他iPhone。

我试过了什么?

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

但它不是一个优雅的解决方案,而且对于iPhone X来说不正确需要增加插图

任何干净的解决方案?

目标iOS 10和11

3 个答案:

答案 0 :(得分:6)

在包含UIViewController的{​​{1}}中添加此内容,以防止集合视图进入导航栏。例如。在UICollectionView方法中:

Swift 4

viewDidLoad

您甚至可以设置self.edgesForExtendedLayout = UIRectEdge.bottom 以防止集合视图也在UITabBars下。

答案 1 :(得分:1)

如果您正在使用界面构建器,可以通过将集合视图的顶部空间约束设置为constant中的superview来轻松完成此操作。 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和界面构建器,您可以从安全区域到布局指南进行免费转换。

答案 2 :(得分:0)

对于Swift 5 试试这个

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true

,然后从IB大小检查器选项卡中将“内容插入”设置为“从不”。