IOS 11:iPhone X 上的 UICollectionView 大小错误
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。
子集合视图从原始集合视图接收的尺寸过高。在故事板上,集合视图的高度相对于顶部栏和底部分页栏定义为齐平。在story board中,collection view的高度比运行时计算出的高度大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
故事板预设:
我想这就是你们所要求的。如果有什么需要看的,尽管问。
添加以下代码行。我想它会解决你的问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.aCollectionVew.setNeedsLayout()
self.aCollectionVew.layoutIfNeeded()
}
请选择所有特征,spacing
和 contentInsetAdjustmentBehavior
。
快乐编码...:)
我也遇到了这个问题。需要调用 safeAreaLayoutGuide 来控制项目的大小。
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
}
}
我有一个集合视图,框架在 iPhone X 上显得太高。在所有其他设备上,调整大小和滚动都正常,如下所示:
但是在 iPhone X 上,它看起来像这样:
顶行被截断,不会一直滚动到最后一行。不知何故,大小调整正确计算了宽度而不是高度,高度大约高了 70 像素。 (我不担心顶部和底部的栏。我稍后会修复它们)
我猜这与 iPhone X 屏幕的插图调整有关,但我不知道如何修复它。我在调整集合视图大小的地方试过这个:
if #available(iOS 11.0, *) {
collectionView.contentInsetAdjustmentBehavior = .always
}
但是,我似乎无法修复它。
编辑:
澄清一下,这个菜单的设置如下,屏幕上实际上有两个集合视图。第一个在启用分页的情况下水平滚动,以便它锁定到每个单元格。其他集合视图是第一个的单元格,它们垂直滚动。我们将调用这些 subCollectionViews。
子集合视图从原始集合视图接收的尺寸过高。在故事板上,集合视图的高度相对于顶部栏和底部分页栏定义为齐平。在story board中,collection view的高度比运行时计算出的高度大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
故事板预设:
我想这就是你们所要求的。如果有什么需要看的,尽管问。
添加以下代码行。我想它会解决你的问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.aCollectionVew.setNeedsLayout()
self.aCollectionVew.layoutIfNeeded()
}
请选择所有特征,spacing
和 contentInsetAdjustmentBehavior
。
快乐编码...:)
我也遇到了这个问题。需要调用 safeAreaLayoutGuide 来控制项目的大小。
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
}
}