dwarvesf / til

Today I Learned. Our knowledge hub. List out what we've learned everyday, organized.
29 stars 1 forks source link

UITableView Layout from Bottom #24

Open viettrungphan opened 6 years ago

viettrungphan commented 6 years ago

Hôm qua, trong lúc làm UI của App Dental thì mình gặp một trường hợp khá thú vị. Ở đây, Ly Nguyễn có thiết kế 1 layout table view dạng từ Bottom to Top.

screen shot 2018-07-10 at 09 22 39

Research khá nhiều bài trên StrackOverflow thì đa số quy về 2 cách giải quyết: 1 - Xoay TableView upsidedown và xoay ngược lại các cell bên trong của nó. Nhược điểm: Scroll view indicator bị xoay theo về bên trái, phải revert datasource. Xoay lại các cell 1 lần nữa. Swipe to delete bị sai. 2 - Tính total height của tất cả các cell + header + footer rồi đẩy xuống bằng cách set UIEdgeinsetTop. Nhược điểm: nặng + khó làm với Autolayout.

Tìm ra giải pháp khác: UILabel khi set multiple + autolayout thì nó tự tính được content size dựa trên Font size + số kí tự.. Có thể áp dụng giải pháp tương tự -> Table cần tính intrinsic layout dựa trên content size `class IntrinsicTableView: UITableView {

override var contentSize:CGSize {
    didSet {
        self.invalidateIntrinsicContentSize()
    }
}

override var intrinsicContentSize: CGSize {
    self.layoutIfNeeded()
    return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}

}` -> Set Layout cho left right bottom. -> Set Top layout >= 0 để view có thể co dãn từ top về bottom và không cao hơn parent view

view.addSubview(tableView) tableView.snp.makeConstraints { (m) in m.left.bottom.right.equalToSuperview() m.top.greaterThanOrEqualToSuperview() }

Kết quả, loại bỏ được việc tính chiều cao Headers, Footers, Cells, keep Swipe to do something..

screen shot 2018-07-10 at 09 34 58

Mở rộng ra, chưa thử nhưng có thể nhúng tableview vào tableview cell.