我希望 collectionView的内容从屏幕的最顶部(状态栏的顶部)开始,因为我有透明导航栏,我想避免使用魔术数字,它应该可以使用iPhone X和其他iPhone。
我试过了什么?
collectionView.contentInset = UIEdgeInsets(top: -64, left: 0, bottom: 0, right: 0)
但它不是一个优雅的解决方案,而且对于iPhone X来说不正确需要增加插图
任何干净的解决方案?
目标iOS 10和11
答案 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大小检查器选项卡中将“内容插入”设置为“从不”。