contentSize、contentOffset和contentInset的圖解辨別

從網(wǎng)易博客轉(zhuǎn)戰(zhàn)簡(jiǎn)書已經(jīng)3個(gè)月了,還沒提筆寫過一篇文章,那就從今天開始寫自己的第一篇文章吧,算是激勵(lì)自己繼續(xù)寫作的動(dòng)力,既然是開篇,那么就從iOS開發(fā)中容易混淆的三個(gè)概念開始吧,之前也看過一些其他作者寫的此類文章,但是大都是用純文字去描述這三者的區(qū)別,對(duì)于iOS初學(xué)者而言,不太容易理解,所以筆者就采用圖解的方式去闡述它們之間的區(qū)別,若有不恰當(dāng)之處,望讀者批評(píng)指正,共同進(jìn)步。

iOS中,UIScrollView是可以滾動(dòng)的視圖,其中最常用的UITableView就是繼承了UIScrollView。

contentSize、contentInset和contentOffset 是scrollView三個(gè)基本的屬性。

contentSize:即內(nèi)容,就是scrollview可以滾動(dòng)的區(qū)域,比如frame = (0 ,0 ,100 ,200) contentSize = (100 ,400),代表你的scrollview可以上下滾動(dòng),滾動(dòng)區(qū)域?yàn)閒rame大小的兩倍。其中常用的是contentSize.height = 內(nèi)容的高度。

contentOffset:即偏移量,其中分為contentOffset.y=內(nèi)容的頂部和frame頂部的差值,contentOffset.x=內(nèi)容的左邊和frame左邊的差值,下面重點(diǎn)闡述contentOffset.y,因?yàn)閏ontentOffset.y最為常用。

contentInset:即內(nèi)邊距,contentInset = 在內(nèi)容周圍增加的間距(粘著內(nèi)容),contentInset的單位是UIEdgeInsets,默認(rèn)值為UIEdgeInsetsZero。

說完了三者的定義,下面介紹contentSize到底包含哪幾部分,tableView的內(nèi)容(即contentSize)僅包含下面三部分:

tableView的內(nèi)容(即contentSize):

1> cell

2> tableHeaderView\tableFooterView

3> sectionHeader\sectionFooter

其中

contentSize.height = 內(nèi)容的高度

contentOffset.y = 內(nèi)容的頂部 和 frame頂部 的差值

contentInset = 在內(nèi)容周圍增加的間距(粘著內(nèi)容)

請(qǐng)讀者牢記上面的概念介紹,對(duì)理解下面的情形有一定的幫助。

情形1:

?沒有cell

?沒有contentInset

?沒有tableHeaderView\tableFooterView

情形2:

?沒有cell

?沒有contentInset

?有tableHeaderView\tableFooterView


情形3:

?有cell

?沒有contentInset

?沒有tableHeaderView\tableFooterView


情形4:

?有cell

?有contentInset

?沒有tableHeaderView\tableFooterView


情形5:

?有cell

?沒有contentInset

?有tableHeaderView\tableFooterView


情形6:

?有cell

?有contentInset

?有tableHeaderView\tableFooterView


情形7:

?有cell

?有contentInset

?沒有tableHeaderView\tableFooterView

?添加了一個(gè)子控件,frame是CGRectMake(0, 0, 300, 50)

?子控件的frame以父控件內(nèi)容左上角為坐標(biāo)原點(diǎn){0,0}


情形8:

?有cell

?有contentInset

?沒有tableHeaderView\tableFooterView

?添加了一個(gè)子控件,frame是CGRectMake(0,-50, 300, 50)

?子控件的frame以父控件內(nèi)容左上角為坐標(biāo)原點(diǎn){0,0}



情形9:

?有cell

?沒有contentInset

?有tableHeaderView\tableFooterView

?添加了一個(gè)子控件,frame是CGRectMake(0, 0, 300, 50)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容