Swift에서 간단한 Grid Layout 구현을 위한 레이아웃 클래스(UIKIT)
본론
UIKIT에서 Grid 레이아웃을 구현할 때 일반적으로 UICollectionView 클래스를 사용합니다.
아시다시피 UICollectionView를 사용할 때 UICollectionViewLayout, UICollectionViewDelegate, UICollectionViewDataSource 등 UICollectionView 방법을 일일이 호출해야 하기 때문에 매우 번거롭습니다.
실제로 작년쯤(더 일찍 시작?)선언적으로 쓰다가 점점 커져서 올해가 되면 SwiftUI도 나오고 상당히 선언적으로 걸려요.
CollectionView는 셀을 다시 사용할 수 있기 때문에 많은 데이터를 표시할 때 사용하지만, 때로는 셀을 다시 사용하지 않을 수도 있습니다.
이럴 때 CollectionView를 사용하지 않고subView를 배열하는 레이아웃 클래스를 조금만 하면 좋겠다고 생각합니다.
재사용되지 않는 GridView 예
예를 들어 암호 자물쇠와 같은 숫자 입력 화면, 달력, 팔레트 등이다.
사용 예1
gridView.backgroundColor = .white
gridView.insets = .zero
gridView.borderWidth = 5
gridView.gridSize = 4
let size = gridView.gridSize * gridView.gridSize
let colors = (0..<size).map { UIColor(hue: CGFloat($0) / CGFloat(size), saturation: 0.85, brightness: 0.9, alpha: 1) }
colors.forEach {
let view = UIView()
view.backgroundColor = $0
gridView.addSubview(view)
}
gridView.layout.center(0).size(300) // オートレイアウトのExtension
팔레트 같은 거.달력 같은 거.
암호의 숫자 입력 화면
실시
final class GridLayoutView: UIView {
var gridSize: Int = 4
var borderWidth: CGFloat = 5
var insets: UIEdgeInsets = .zero
override func layoutSubviews() {
super.layoutSubviews()
let margin = borderWidth
let width = (bounds.width - CGFloat(gridSize - 1) * margin - insets.left - insets.right) / CGFloat(gridSize)
let height = (bounds.height - CGFloat(gridSize - 1) * margin - insets.top - insets.bottom) / CGFloat(gridSize)
let startX: CGFloat = insets.left
let startY: CGFloat = insets.top
var x = startX
var y = startY
subviews.enumerated().forEach { index, view in
view.frame.origin = CGPoint(x: x, y: y)
view.frame.size = CGSize(width: width, height: height)
x += width + margin
if index % gridSize == gridSize - 1 {
x = startX
y += height + margin
}
}
}
}
Tips
지원
등 간격 구성View는 UIStackView를 자주 사용하지만 이번에는 사용하지 않습니다.
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
Storyboard Part 분들은 Uistack View 사용하기가 쉽지 않을 것 같아요.
개인 개발에서 압도적인 단시간 재활용 (구성 요소로)
총결산
GridLayout을 조금이라도 실현하기 위해 판면 디자인 클래스를 만들어 사용한 것이 아니다.
insert, delete, drag, reuse 등 UICollectionView는 많은 장점이 있습니다.
Reference
이 문제에 관하여(Swift에서 간단한 Grid Layout 구현을 위한 레이아웃 클래스(UIKIT)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/abouch/items/2f9cbc0f725c8c7cbb67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)