1. 可以根據text的字數來調整高度及寬度
import UIKitclass ResizableButton: UIButton {override func layoutSubviews() {titleLabel?.preferredMaxLayoutWidth = frame.size.widthsuper.layoutSubviews()}override var intrinsicContentSize:CGSize {let labelSize = titleLabel?.sizeThatFits(CGSize(width: self.titleLabel?.preferredMaxLayoutWidth ?? frame.width, height: CGFloat.greatestFiniteMagnitude)) ?? .zerolet desiredButtonSize = CGSize(width: labelSize.width + titleEdgeInsets.left + titleEdgeInsets.right, height: labelSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)return desiredButtonSize}} 

--

--

TableView Style Group ,Header 有一個blank

  1. 似乎是一個bug,若將styleui 改為 plain則不會出現

SectionHeader And Footer AutoHeight

  1. SectionHeader Auto Size 不能用 UITableViewHeaderFooterView 作為headerView 要用一般的UIView……(爛bug),也有可能是不能用 UITableViewHeaderFooterView 的contentView
  2. SectionHeader 若要autoHeight, 可以用UILabel,但無法用UITextView(無法隨著內容變動高度,只能用在row cell)

UILabel in Cell ContentView

1. UILabel 若要自適應高度於cell contentView,須在label 外,再放一層view 當作parentView,將parentView add to contentView才行

2. 但是似乎在section header的 UITableHeaderFooterView上面無法將UILabel加在contentView上面達到auto size label,還是只能加在subView上面

--

--

Topic

Assign Data To Cell

  1. 可利用tbItem 作為dataSource, 在tbItem內讀取非同步資料, temp save 住資料,才不會每次cell reuse時,都需要重新load資料

Cell Inset

  1. 用自動計算高度時,不能用原本的cell contentView 去做inset , 否則自動計算高度會錯誤,所以要在contentView add insetView 當作 SubView ,可對insetView 設置inset ,然後把其他SubView,add to insetView即可。

Async UIImage(Download from server) Dynamic height in cell (製作一個根據圖片高度而自適應高度的cell,圖片要可以等比例縮放到螢幕寬,高由比例決定)

  1. 讀取相片後須cache住 uiimage & image size (不要每次assign 給cell時才讀取)
  2. 將UIImage 放入StackView裡面
  3. 無法在非同步圖片讀取後,取得圖片比例高,然後update constraint的方式,cell會無法重新計算高度
  4. 改以assgin cell 時,將已存取的 image size 計算出ratio Height , update StackView(or imgView)的 Constraints(不能用reload data的方式,因為assign 完又reload 會變無限循環)…

--

--