오늘은 간단한 예제로 Cell 갯수에따라 테이블 뷰 높이를 바꿔보는 걸 해볼려고해요
먼저 프로젝트 생성 후 간단하게 테이블 뷰를 만들어주겠습니다.
tableView.backgroundColor = .green
tableView.delegate = self
tableView.dataSource = self
tableView.snp.makeConstraints{
$0.width.equalTo(200)
$0.height.equalTo(50)
$0.center.equalToSuperview()
}
스냅킷이랑 스토리보드랑 막 썼어요!!! (귀차니즘..)
테이블 뷰 그리는 방법은 다 아실거라고 생각하고 다음 고고
그리고
var data = [
"안녕하세요",
"재욱이에요"
]
이런 변수를 만들고 버튼을 하나 만들거에요
버튼을 클릭하면 data가 추가되고 그에 따라 셀도 늘어나겠죠??
보통 테이블 뷰 크기는 고정인데 우리는 다르게 테이블 뷰 자체가 커지도록 해볼거에요
버튼을 대애애충 만들자!
let btn = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
self.view.addSubview(btn)
btn.backgroundColor = .lightGray
btn.addTarget(self, action: #selector(changeData), for: .touchUpInside)
정말 대충 만들었쬬
changeData라는 함수가 실행하면 data를 append 시켜줄거구
tableView의 height를 변경해주기만 하면 끝!
전체 소스 첨부할게용
//
// ViewController.swift
// Test
//
// Created by Jay on 2022/03/02.
//
import UIKit
import SnapKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var data = [
"안녕하세요",
"재욱이에요"
]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView.backgroundColor = .green
tableView.delegate = self
tableView.dataSource = self
tableView.snp.makeConstraints{
$0.width.equalTo(200)
$0.height.equalTo(50)
$0.center.equalToSuperview()
}
let btn = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
self.view.addSubview(btn)
btn.backgroundColor = .lightGray
btn.addTarget(self, action: #selector(changeData), for: .touchUpInside)
}
@objc func changeData(){
print("클릭")
data.append("반가워요!")
tableView.snp.updateConstraints{
$0.height.equalTo(data.count * 50)
}
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
print("여기")
return UITableViewCell() }
cell.textLabel?.text = data[indexPath.row]
cell.backgroundColor = .red
return cell
}
}
아 참 근데 셀의 갯수는 테이블 뷰를 리로드해야 갱신됩니다.
음 근데 만약 셀의 크기도 유동적이라면 어떻게 할까요??
그때는 tableView.contentSize.height!
즉 테이블뷰가 가지고 있는 컨텐츠의 사이즈를 높이로 지정해주면 됩니다!
@objc func changeData(){
print("클릭")
data.append("반가워요!")
tableView.snp.updateConstraints{
$0.height.equalTo(self.tableView.contentSize.height)
}
tableView.reloadData()
}
리로드도 추가했어요!!
이러면 클릭 할 때 마다 테이블 뷰가 커지는걸 확인 할 수 있어요
끝
'개발 > 개발' 카테고리의 다른 글
[iOS] - Firebase crashlytics 연동하기 (0) | 2022.04.11 |
---|---|
[iOS] - RxDataSource로 테이블뷰 헤더 푸터 그리기 (MVVM) (0) | 2022.04.04 |
[iOS] - 채팅할려고 정리하는 Swift 채팅 구현 - Socket.io & Node.JS (0) | 2022.03.22 |
x84_64, arm64 오류 해결 SPM과 코코아팟 함께 쓸 때 (0) | 2022.03.07 |
[iOS] - iOS 앱에서 HTTP 통신 하기 (0) | 2022.02.12 |