ios 之 autoresizing小解
對于IOS的app開發人員來說,不會像Android開發人員一樣為非常多的屏幕尺寸來做界面適配,因此硬編碼的坐標也能工作良好,可是從設計模式上來說這不是好的做法。
并且也另一些問題,如iPhone5的適配,橫豎屏的切換等。也許你能夠做兩套UI方案來做適配,可是這樣添加反復工作量。并且不夠高端,萬一有出新的屏幕大小了呢。哲理就將介紹IOS中的兩大自己主動布局利器:Autoresizing?和?Autolayout。
autoresizing是UIView的屬性。一直都有,使用簡單,可是沒有autolayout強大。autolayout是IOS6以后的新技術,更加強大。本文主要介紹Autoresizing的特性和使用方法。
1. Autoresizing特性
當UIView的autoresizesSubviews是YES時。(默認是YES), 那么在當中的子view會依據它自身的autoresizingMask屬性來自己主動適應其與superView之間的位置和大小。
autoresizingMask是一個枚舉類型, 默認是UIViewAutoresizingNone, 也就是不會autoresize:
| typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; |
這個枚舉類型,使用了?1 << n?這種寫法來定義。代表了它能夠復選。假設你不明確為什么。能夠復習下“位運算”。 那么這些值分別代表什么意思呢?
事實上怎樣理解這幾個值非常easy,那就是從xib里面看。 我們在一個xib文件里,取消勾選autolayout,(默認使用autolayout時。autoresizing看不到)。那么我們能夠在布局那一欄看到怎樣設置autoresizing.
上圖說明了在xib中設置的這些線條和實際屬性相應的關系。這當中須要注意的是,當中4個margin虛線才代表設置了該值,而width和height是實線代表設置了該值,不能想當然的理解。
這些項分別代表:
autoresizingMask是子視圖的左、右、上、下邊距以及寬度和高度相對于父視圖按比例變化。比如:
UIViewAutoresizingNone 不自己主動調整。
UIViewAutoresizingFlexibleLeftMargin 自己主動按比例調整與superView左邊的距離,且與superView右邊的距離不變。
UIViewAutoresizingFlexibleRightMargin 自己主動按比例調整與superView的右邊距離,且與superView左邊的距離不變。
UIViewAutoresizingFlexibleTopMargin ?自己主動按比例調整與superView的頂部距離,且與superView底部的距離不變。
UIViewAutoresizingFlexibleBottomMargin?自己主動按比例調整與superView的底部距離,且與superView頂部的距離不變。
UIViewAutoresizingFlexibleWidth?自己主動按比例調整寬度。
UIViewAutoresizingFlexibleHeight?自己主動按比例調整高度。
UILabel*????label = [[UILabel?alloc]?initWithFrame:CGRectMake(50,?100,?200,?40)];
[label?setAutoresizingMask:?UIViewAutoresizingNone]; ?控件相對于父視圖坐標值不變 ??
CGRectMake(50,?100,?200,?40) UIViewAutoresizingFlexibleWidth:控件的寬度隨著父視圖的寬度按比例改變 ???比如 label寬度為 100 ????屏幕的寬度為320 ?????????當屏幕寬度為480時 ?????label寬度 ?變為 ?100*480/320以上這些都較易理解, 可是autoresizing另一些組合場景。那就是組合使用的場景。
| None | view的frame不會隨superview的改變而改變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變) | |
| TopMargin | BottomMargin | view與其superView的上邊距和下邊距的比例維持不變 | |
| LeftMargin | RightMargin | view與其superView的左邊距和右邊距的比例維持不變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變) | |
| LeftMargin | RightMargin | TopMargin | BottomMargin | view與其superView的上下左右邊距的比例維持不變 | |
| LeftMargin | Width | view與其superView的右邊距的比例維持不變, 左邊距和width按比例調整(右圖的xib中預覽效果與實際效果有差。實際效果是view的上邊距不變) | |
| LeftMargin | Width | RightMargin | 左邊距、右邊距、寬按比例調整。(右圖的xib中預覽效果與實際效果有差。實際效果是view的上邊距不變)垂直方向是相同效果。故不列舉 | |
| Width | Height | 自己主動調整view的寬和高,保證上下左右邊距不變。如把tableView設置為此屬性,那么不管viewController的view是多大,都能自己主動鋪滿 |
上面并未列舉全部組合場景,可是已經足夠我們理解?autoresizing?了。
2. 小結
Autoreszing的最常見的有用場景就是iPhone5的兼容了。
比方我們想要設置tableView的frame,那我們僅僅須要在初始化設置frame之后將tableView的autoresizingMask設置為UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight?即可了。
還有一種比方我們想要一個view一直停留在其superview的最下方,那么我們在初始化設置frame之后僅僅須要將autoresizingMask設置為UIViewAutoresizingFlexibleTopMargin?就能夠了。
autorezingMask簡單的一個屬性。理解它之后能夠讓非常多事情變得簡單。
轉載于:https://www.cnblogs.com/yfceshi/p/7240928.html
總結
以上是生活随笔為你收集整理的ios 之 autoresizing小解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两篇波兰地区重金属污染地区土壤微生物多样
- 下一篇: dede后台栏目管理文章统计数量和实际文