본문 바로가기

Tech/iOS

[iOS]Day36 - AutomaticDimenssion

728x90

 

미친듯한 비다 

취준생 장점 이럴 때 안나가도 됨


AutomaticDimenssion

과제 중에 버튼을 누를 때 마다 Label안에 있는 가려져 있는 텍스트가 보이는 Lable을 구현 해야했다

AutomaticDimenssion을 모른다면 구현을 하는데 상당히 난항을 겪게 된다

 

쉽게 말하면, 동적인 TableViewCell을 만드는 과정으로 컨텐츠의 양에 따라 Cell의 크기가 달라질 수 있게 한다

 

*AutomaticDimenssion의 조건

 - Label의 NumberOfLines = 0

 - tableView height는 AutomaticDimenssion

 - Layout 조정 필수 

 

var isExpanded = false //false 2줄, true 0으로

 override func viewDidLoad() {
        super.viewDidLoad()
        tableView.rowHeight = UITableView.automaticDimension
}

	//버튼을 눌렀을 때 확장
    @IBAction func expandCell(_ sender: UIBarButtonItem) {
        
        isExpanded = !isExpanded
        tableView.reloadData()
        
    }
    //cellForRowAt에서 lable의 numberOfLines의 조건을 버튼이 누르지 않았을때는 2 눌렀을때는 0
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: kakaoCell.identifier) as? kakaoCell else { return UITableViewCell()}
        
        cell.testLable.numberOfLines = isExpanded ? 0 : 2 // 0이 아니면 2줄 제한
        
        return cell
    }
    
    //조건에 부합하게 height는 automatiocDimension 설정
     func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension // 특정 셀에 대해서만 설정 가능
    }

전체 코드는 가져오지 않고 필요한 부분만 가져왔다

Bool 타입으로 확장이 됐을 때는 true (numberOfLines = 0) 아닐 때는 false로 설정 해준다

UITableView 셀의 height에 automaticDimension 설정 (heightForRowA에서도)

버튼을 눌렀을 때 확장을 해주고 데이터를 reload해준다

cellForRowAt에서 numberOfLines에 대한 조건을 설정해주어서 Lable의 컨텐츠를 전체를 보여주거나 일부만 보여준다