formagran 님께서 잘 정리해주셔서
대충 오른쪽 정렬 만듬 collectionViewFlowlayout 잡을 때 이렇게 잡아주면 끝.
class CollectionViewRightAlignFlowLayout: UICollectionViewFlowLayout {
let cellSpacing: CGFloat = 0
let cellItemSize: Double
init(cellItemSize: Double){
self.cellItemSize = cellItemSize
super.init()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
self.minimumLineSpacing = 0.0
self.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom:0, right: 0)
let attributes = super.layoutAttributesForElements(in: rect)
var rightMargin = sectionInset.right
var maxY: CGFloat = 10
attributes?.forEach { layoutAttribute in
if layoutAttribute.frame.origin.y >= maxY {
rightMargin = sectionInset.right
}
print(collectionViewContentSize.width)
layoutAttribute.frame.origin.x = collectionViewContentSize.width - rightMargin - cellItemSize
rightMargin += layoutAttribute.frame.width + cellSpacing
maxY = max(layoutAttribute.frame.maxY, maxY)
}
return attributes
}
}
11월 18일 위의 코드는 오류나는 걸 찾음. 아래 코드로 사용하면 해결됌.
class CollectionViewRightAlignFlowLayout: UICollectionViewFlowLayout {
let cellSpacing: CGFloat = 4
let cellItemSize: Double
init(cellItemSize: Double){
self.cellItemSize = cellItemSize
super.init()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
self.minimumLineSpacing = 4.0
self.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom:0, right: 16)
guard let superArray = super.layoutAttributesForElements(in: rect) else { return nil }
guard let attributes = NSArray(array: superArray, copyItems: true) as? [UICollectionViewLayoutAttributes] else { return nil }
var rightMargin = sectionInset.right
var maxY: CGFloat = 300
attributes.forEach { layoutAttribute in
if layoutAttribute.frame.origin.y >= maxY {
rightMargin = sectionInset.right
}
layoutAttribute.frame.origin.x = collectionViewContentSize.width - rightMargin - cellItemSize
rightMargin += layoutAttribute.frame.width + cellSpacing
maxY = max(layoutAttribute.frame.maxY, maxY)
}
return attributes
}
}
'iOS' 카테고리의 다른 글
레이아웃 부서지면 쓰는 사이트 (0) | 2022.11.18 |
---|---|
rename 꼬일 때 (0) | 2022.11.17 |
collectionView 가 여러개일때 (0) | 2022.11.15 |
앱 실행되는 전체 과정 (0) | 2022.10.14 |
TIL - [iOS]Class, Struct 차이 (0) | 2022.09.05 |