gpt4 book ai didi

layout - NSCollectionViewFlowLayout - 左对齐

转载 作者:行者123 更新时间:2023-12-04 02:28:35 25 4
gpt4 key购买 nike

NSCollectionViewFlowLayout 生成一个布局,其中项目在右边距对齐,或者,如果容器的宽度仅足以容纳一个项目,则将项目居中。我期待一个对齐选项,例如在委托(delegate)上,但在文档中找不到任何内容。它是否需要子类化 NSCollectionViewFlowLayout 来实现这一点?

最佳答案

@Obliquely 的答案在 collectionViewItems 时失败高度不均匀。以下是修改后的代码,用于处理 Swift 4.2 中大小不一的项目:

class CollectionViewLeftFlowLayout: NSCollectionViewFlowLayout
{
override func layoutAttributesForElements(in rect: CGRect) -> [NSCollectionViewLayoutAttributes]
{
let defaultAttributes = super.layoutAttributesForElements(in: rect)

if defaultAttributes.isEmpty {
return defaultAttributes
}

var leftAlignedAttributes = [NSCollectionViewLayoutAttributes]()

var xCursor = self.sectionInset.left // left margin
var lastYPosition = defaultAttributes[0].frame.origin.y // if/when there is a new row, we want to start at left margin
var lastItemHeight = defaultAttributes[0].frame.size.height

for attributes in defaultAttributes
{
// copy() Needed to avoid warning from CollectionView that cached values are mismatched
guard let newAttributes = attributes.copy() as? NSCollectionViewLayoutAttributes else {
continue;
}

if newAttributes.frame.origin.y > (lastYPosition + lastItemHeight)
{
// We have started a new row
xCursor = self.sectionInset.left
lastYPosition = newAttributes.frame.origin.y
}

newAttributes.frame.origin.x = xCursor

xCursor += newAttributes.frame.size.width + minimumInteritemSpacing
lastItemHeight = newAttributes.frame.size.height

leftAlignedAttributes.append(newAttributes)
}
return leftAlignedAttributes
}
}

关于layout - NSCollectionViewFlowLayout - 左对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com