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