使用案例
UICollectionView
来展示产品,我们称之为productsViewCollection
(只有一行有多个ProductCell
)。ProductCell
可能有不同的高度,但它们都具有相同的宽度。ProductCell
可能会在运行时添加。AutoLayout
的{{1}}。我有ProductCell
自定义类,可以使产品单元格对齐。
UICollectionViewFlowLayout
有什么问题?
class TopLayout : UICollectionViewFlowLayout {
override func awakeFromNib() {
super.awakeFromNib();
self.scrollDirection = .horizontal;
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let attributesArray = super.layoutAttributesForElements(in: rect);
if attributesArray != nil {
for attributes in attributesArray! {
if (attributes.representedElementKind == nil) {
let rect : CGRect? = self.layoutAttributesForItem(at: attributes.indexPath)?.frame;
if (rect != nil) {
attributes.frame = rect!;
}
}
}
}
return attributesArray;
}
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
let attributes = super.layoutAttributesForItem(at: indexPath);
//let sectionInset : UIEdgeInsets = (self.collectionView?.collectionViewLayout as! UICollectionViewFlowLayout).sectionInset;
if (indexPath.item >= 0) {
attributes?.frame.origin.y = 0;
}
return attributes;
}}
的高度的方法。productsCollectionView
只显示一行。productsCollectionView
插入ProductCell
导致滚动到第一项!我需要将其保持在同一位置。我尝试了什么?
productsCollectionView
的高度,否则productsCollectionView
将不会出现。ProductCell
,"The behavior of the UICollectionViewFlowLayout is not defined because the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values."
没有插入内容(Horizontal UICollectionView single row layout)。productsCollectionView
高度约束来确定collectionView.contentSize
的高度,但它不起作用,因为即使您调用了productsCollectionView
,它也不会有最终的计算大小或任何类似的方法(How to determine height of UICollectionView with FlowLayout和许多其他链接)。layoutIfNeeded
来确定collectionView.collectionViewlayout.collectionViewContentSize
的高度,但它不起作用,它将正确计算宽度,同时根据{{确定高度1}}约束不依赖于最大productsCollectionView
高度,因此我没有找到自动确定高度的方法(How to determine height of UICollectionView with FlowLayout和许多其他链接)。AutoLayout
s最大高度,我为ProductCell
设置了更大的高度约束,并在ProductCell
中调用{{1} {}为productsViewCollection
中的每个项目计算每个MyViewController
高度。layoutAttributesForItem
将扩展几毫秒然后正确裁剪:( productsViewCollection
高度(Display one row in UICollectionView - Swift)。 ProductCell
设置更大的值,但不是100%正确,它会在末尾添加额外的空间(UICollectionView: One Row or Column)。productsCollectionView
方法中的自定义productsCollectionView
类使minimumInteritemSpacing
高度与ProductCell
高度相同,但它不起作用,高度发生了变化但是在同一列的细胞,我不知道为什么!productsCollectionView
代码,但没有任何反应。UICollectionViewFlowLayout
然后应用它,只有当我将layoutAttributesForItem
参数设置为等于productsCollectionView
时,它才有效,否则将无法指定滚动。注意: 抱歉我的英语不好&感谢。