本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java
, 數(shù)據(jù)結(jié)構(gòu)與算法
, iOS
, 安卓
, python
, flutter
等等, 如有需要, 聯(lián)系微信tsaievan
.
好久沒更新簡(jiǎn)書了, 今天說一點(diǎn)UI基礎(chǔ)的知識(shí)點(diǎn). 那就是標(biāo)題涉及的幾個(gè)概念.
以tableView為例, 因?yàn)閠ableView是繼承自UIScrollView的, 那么當(dāng)然會(huì)有contentSize
- 有cell, 無(wú)contentInset, 無(wú)tableHeaderView,tableFooterView的情況
-
有cell, 無(wú)contentInset, 有tableHeaderView,tableFooterView的情況
有cell, 有contentInset, 無(wú)tableHeaderView,tableFooterView的情況
那么如果出現(xiàn)下列狀況, tableView的contentOffset.y是多少呢?
對(duì)于情況1來說, contentInset內(nèi)邊距并不是內(nèi)容的一部分, 所以contentOffset算內(nèi)容的偏移量是不會(huì)把邊距算進(jìn)去的, 那么偏移量就應(yīng)該從第一個(gè)cell的原點(diǎn)開始算, 那么此時(shí)的contentOffset.y就應(yīng)該是0 - 64, 為-64
對(duì)于情況2來說, tableHeaderView是內(nèi)容的一部分, 所以contentOffset算內(nèi)容的偏移量是要把tableHeaderView算進(jìn)去的, 那么偏移量就應(yīng)該從tableHeaderView的原點(diǎn)開始算, 那么此時(shí)的contentOffset.y就應(yīng)該是0
最后我們來考慮一些非常特殊的情況
- 添加子控件, 不設(shè)置contentInset
- 添加子控件, 設(shè)置contentInset
- 添加子控件, 設(shè)置contentInset, 設(shè)置tableHeaderView, tableFooterView
總結(jié), 其實(shí)上面說了那么多, 總結(jié)起來無(wú)非下面幾句話:
-
內(nèi)容的含義:
- 內(nèi)容包括: 1. cell
- tableHeaderView / tableFooterView
- sectionHeader / sectionFooter
contentSize.height: 所有內(nèi)容的高度
contentInset: 在內(nèi)容周圍額外增加的間距(內(nèi)邊距), 始終黏著內(nèi)容
contentOffset: 內(nèi)容距離frame矩形框偏移了多少
frame: 以父控件內(nèi)容的左上角為坐標(biāo)原點(diǎn)(0,0)
bounds: 以自己內(nèi)容的左上角為坐標(biāo)原點(diǎn)(0,0)