UITableViewController 없이 Static Cell Tableview 사용하기

cskim·2019년 10월 1일
0

일반적으로 tableView는 prototype cell을 사용하여 만듭니다. 그런데, 만약 static cell을 갖는 tableView를 만들려고 한다면 UITableView를 사용할 수 없습니다. Static cell을 갖는 tableView는 반드시 UITableViewController를 사용하여 생성되어야 합니다.

class ViewController: UITableViewController {
  // ...
}

In Storyboard

UITableViewController를 사용할 때는 한 가지 문제가 있습니다. TableView를 갖는 UIViewController를 만드는 것이기 때문에 UITableView처럼 화면의 일정 영역에 배치해서 사용할 수 없고, 항상 전체 view로만 사용해야 한다는 점입니다. 이 문제는 interface builder에서는 Container View를 사용하여 해결할 수 있습니다.

  1. Storyboard에서 container view를 추가합니다.
  2. 자동으로 생성되는 segway와 ViewController는 삭제합니다.
  3. Storyboard에 UITableViewController를 추가합니다.
  4. 생성한 UITableViewController를 container view의 embed in segway로 연결합니다.

위 과정을 통해 UITableViewController의 root view를 container view에서 나타낼 수 있습니다. 만약, static cell의 개수만큼 화면에 딱 맞게 나오게 하고 싶다면 container view의 size를 cell의 총 높이만큼 조절해주면 됩니다. 예를 들어, height가 50인 static cell 4개를 딱 맞게 보여주고 싶다면, container view의 height을 200으로 설정합니다.

In Programmatically

Container view는 별도의 타입이 아니라서 코드에서 직접 사용할 수 없고, 일반적인 UIView에서 UITableViewController의 view를 보여주는 방식을 사용해야 합니다.

class StaticCellTableViewVC: UITableViewController { }
class ViewController: UIViewController {
  private let containerView = UIView()
  override func viewDidLoad() {
    super.viewDidLoad()
    
    let tableViewVC = StaticCellTableViewVC()
    tableViewVC.willMove(toParent: self)
    self.addChild(tableViewVC)
    containerView.addSubview(tableViewVC.view)
    tableViewVC.didMove(toParent: self)
    
    let containerSize = container.frame.size
    child.view.frame = CGRect(x: 0, y: 0, width: containerSize.width, height: containerSize.height)
  }
}

Reference

https://stackoverflow.com/questions/22364230/static-table-view-outside-uitableviewcontroller
https://stackoverflow.com/questions/37370801/how-to-add-a-container-view-programmatically/37370856

profile
iOS Developer

0개의 댓글