![](/img/trans.png)
[英]iOS iPhone - UICollectionView reloading wrong UICollectionViewCell at indexPath
[英]IOS 11: UICollectionView on iPhone X is sized wrong
我有一个集合视图,框架在 iPhone X 上显得太高。在其他所有设备上,大小和滚动都正常工作,如下所示:
但是在 iPhone X 上,它看起来像这样:
顶行被截断,它不会一直向下滚动到最后一行。 不知何故,调整大小正确计算了宽度而不是高度,大约 70 像素太高了。 (我不担心顶部和底部栏。稍后我会修复它们)
我猜这与 iPhone X 屏幕的插入调整有关,但我不知道如何修复它。 我已经在我调整集合视图大小的地方尝试过这个:
if #available(iOS 11.0, *) {
collectionView.contentInsetAdjustmentBehavior = .always
}
但是,我似乎无法修复它。
编辑:
澄清一下,这个菜单的设置如下,屏幕上实际上有两个集合视图。 第一个在启用分页的情况下水平滚动,以便锁定到每个单元格。 其他集合视图是第一个的单元格,它们垂直滚动。 我们将调用这些 subCollectionViews。
subCollectionViews 正在接收来自太高的原始集合视图的大小。 在故事板上,集合视图的高度相对于顶部栏和底部分页栏定义为齐平。 在故事板中,集合视图的高度比运行时计算的高度大约 70 个像素。
所以对于单元格的布局指南:
override func awakeFromNib() {
cellImage = UIImageView(frame: contentView.frame)
cellImage?.contentMode = .scaleAspectFill
cellImage?.clipsToBounds = true
contentView.addSubview(cellImage!)
}
对于集合视图的布局:
layout.scrollDirection = .vertical
layout.minimumLineSpacing = 8
layout.minimumInteritemSpacing = 8
对于故事板预设:
我想这就是你们所要求的。 如果有什么需要看的,尽管问。
我也面临这个问题。 需要调用safeAreaLayoutGuide来控制item的大小。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if #available(iOS 11.0, *) {
return view.safeAreaLayoutGuide.layoutFrame.size
} else {
// Fallback on earlier versions
return view.frame.size
}
}
添加以下代码行。 我认为它会解决你的问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.aCollectionVew.setNeedsLayout()
self.aCollectionVew.layoutIfNeeded()
}
请获取所有特征、 spacing
和contentInsetAdjustmentBehavior
。
快乐编码...:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.