從網易博客轉戰簡書已經3個月了,還沒提筆寫過一篇文章,那就從今天開始寫自己的第一篇文章吧,算是激勵自己繼續寫作的動力,既然是開篇,那么就從iOS開發中容易混淆的三個概念開始吧,之前也看過一些其他作者寫的此類文章,但是大都是用純文字去描述這三者的區別,對于iOS初學者而言,不太容易理解,所以筆者就采用圖解的方式去闡述它們之間的區別,若有不恰當之處,望讀者批評指正,共同進步。
iOS中,UIScrollView是可以滾動的視圖,其中最常用的UITableView就是繼承了UIScrollView。
contentSize、contentInset和contentOffset 是scrollView三個基本的屬性。
contentSize:即內容,就是scrollview可以滾動的區域,比如frame = (0 ,0 ,100 ,200) contentSize = (100 ,400),代表你的scrollview可以上下滾動,滾動區域為frame大小的兩倍。其中常用的是contentSize.height = 內容的高度。
contentOffset:即偏移量,其中分為contentOffset.y=內容的頂部和frame頂部的差值,contentOffset.x=內容的左邊和frame左邊的差值,下面重點闡述contentOffset.y,因為contentOffset.y最為常用。
contentInset:即內邊距,contentInset = 在內容周圍增加的間距(粘著內容),contentInset的單位是UIEdgeInsets,默認值為UIEdgeInsetsZero。
說完了三者的定義,下面介紹contentSize到底包含哪幾部分,tableView的內容(即contentSize)僅包含下面三部分:
tableView的內容(即contentSize):
1> cell
2> tableHeaderView\tableFooterView
3> sectionHeader\sectionFooter
其中
contentSize.height = 內容的高度
contentOffset.y = 內容的頂部 和 frame頂部 的差值
contentInset = 在內容周圍增加的間距(粘著內容)
請讀者牢記上面的概念介紹,對理解下面的情形有一定的幫助。
情形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
?添加了一個子控件,frame是CGRectMake(0, 0, 300, 50)
?子控件的frame以父控件內容左上角為坐標原點{0,0}
情形8:
?有cell
?有contentInset
?沒有tableHeaderView\tableFooterView
?添加了一個子控件,frame是CGRectMake(0,-50, 300, 50)
?子控件的frame以父控件內容左上角為坐標原點{0,0}
情形9:
?有cell
?沒有contentInset
?有tableHeaderView\tableFooterView
?添加了一個子控件,frame是CGRectMake(0, 0, 300, 50)