나만의 공부 노트
Table View에 관하여 본문
테이블 뷰에서 셀의 높이를 결정하는 법
1. 스토리보드에서에서 정적으로 할당 가능
(아래의 delegate, auto를 안쓴다는 가정하에..)
1-1. Dynamic table인 경우
각각의 table view cell는 무시되고 table view에서 지정한 셀 높이가 됨
2-1. Static table인 경우
table view에서 지정한 셀 높이보다 각각의 table view cell의 높이로 잘 지정됨
2. delegate
delegate를 쓴다는 것은 결국 동적 테이블이다 -> 스토리보드에서 지정한 table view가 가진 cell의 높이로 결정!
그러나 테이블 뷰가 계속 datasource, delegate로 물어보니 아래의 함수가 호출되어 결국 아래 함수가 최종 winner!
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
<#code#>
} -> 근데 이렇게 하면 셀마다도 안에 그림같은게 크기가 달라지면 높이가 달라져야하는데 매우 불편쓰
3. UITableViewAutomaticDimension
전체 : tableView.estimatedRowHeight = 50 <- 기본적인 default 값으로 너무 차이나지 않게 잘 넣어주고, 제약조건 설정을 매우 잘해야한다
개별 : override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
<#code#>
} <- 함수 통해 개별로도 가능해버리기~
값의 차이가 많이 나거나 제약조건이 불충분하면 높이가 어긋나서 스크롤이 이상해지고 다른 버튼이 눌리는 현상이 발생할 수 있다고 함!
* 이걸 쓰는 이유가 estimated 안쓰고 다 계산해서 구하면 셀이 1만개인경우는 content 사이즈 어케 구함?;;
너무 비용이 크기때문에 estimated로 일단 content사이즈 대충 구하고 스크롤링할 때 부족하면 content size를 리사이징해서 해결하는 듯
그래서 estimated 값이 너무 작으면 문제가 생기겠지요?? 잘 씁시당
-> 강의를 보니 화면에 안나타나는 셀들은 estimated 값을 쓴다고 함 autolayout 값을 다 계산하면 폭발하니
tableView.rowHeight = UITableView.automaticDimension <- 자동으로 높이를 쓰겠다 선언!(Constraint 잘!!!하!!자!!)
-> 이거 해놓고 delegate를 쓰면 바보겠지?
해보니깐 셀의 뷰에 높이를 측정할 수 있게 엄청 잘 constraint를 걸어줘야댐
만약 왼쪽 위 만 걸어놨으면 아래 쪽이 얼마나 길고 짧을 지 가늠 안됨 -> delegate나 기본 cell 높이 따름..
dequeueReusableCell(withIdentifier: <#T##String#>)
dequeueReusableCell(withIdentifier: <#T##String#>, for: indexPath)
의 차이는 전자가 더 옛날 버전!
identifier가 없으면 전자는 nil을 반환하지만, 후자는 assert를 내줌!
+ xib로 만든 셀이 있다면 다음과 같이 사용
let nibName = UINib(nibName: "WeatherCell", bundle: nil)
tableView.register(nibName, forCellReuseIdentifier: "weatherCell")
'정리 X > UIKit' 카테고리의 다른 글
Navigation Bar에 대하여 (0) | 2021.02.07 |
---|---|
Scroll View에 관하여 (0) | 2021.02.06 |
Control에 관하여 (0) | 2021.02.06 |
View에 관하여 (0) | 2021.02.06 |
Life Cycles에 관하여 (0) | 2021.02.06 |