標籤:
1. 概述
iOS開發中,必然會涉及到布局相關問題,frame,bounds,contenSize,contentOffset,contentInset這幾個布局相關概念讓許多初學者感到困惑。雖然初步瞭解這幾個概念,即可完成大部分介面的布局,但布局較複雜頁面時就有點力不從心了。
2. 概念解析2.1 frame
frame是一個矩形地區,反映當前view相對於它的superview的位置關係,左上方的點(frame.origin)的x,y軸值確定了矩形地區的位置(frame.origin.x, frame.origin.y);寬(frame.size.width)和高(frame.size.height)確定了矩形的面積。
2.2 bounds
bounds與frame類似,同樣是一個矩形地區,有與frame一樣的屬性,但與frame以其父視圖為參考不同的是bounds以當前視圖為參考,反映的是當前view自己的位置關係。frame和bound都可以使同一個視圖(控制項)在同一位置。但根據實際情況靈活使用frame和bounds可以使代碼邏輯簡化,降低布局的相互依賴。
2.3 contentSize
contentSize是UIScrollView和繼承於UIScrollView的子控制項的屬性,contentSize是確定UIScrollView上contentView寬(contentSize.width)和高(conteSize.height)的屬性。
UIScrollView可以看成是一個兩層的複合視圖,1所示,上層是固定不動的UIScrollView,下層是可以滑動的contenView,contenView的尺寸可以大於上層的UIScrollView。
圖1 UIScrollView層次關係2.4 contentOffset
contentOffset是UIScrollView和繼承於UIScrollView的子控制項的屬性,contentOffset確定的是UIScrollView的頂點(左上方點)值相對於其父類別檢視的頂點值(即frame.origin)的距離。
2.5 contentInset
contentInset是UIScrollView和繼承於UIScrollView的子控制項的屬性,contentInset確定的是contenView上下左右相對於UIScrollView擴充出來的地區大小。contentInset是UIEdgeInsets類型的,預設值為UIEdgeInsetsZero。
3. 總結
frame,bounds,contenSize,contentOffset,contentInset是布局中常用的屬性,靈活使用會大大提升開發效率、布局的靈活性和代碼的邏輯性,涉及屬性的總結2所示。
圖2 布局相關屬性之間關係
注意:圖中contentInset的值為負值
轉載自:http://www.jianshu.com/p/c36d3fb3c833
iOS開發frame, contentSize, contentOffset, contentInset 區別聯絡淺析