自動布局之a(chǎn)utoresizingMask使用詳解(Storyboard&Code)

原文地址:http://www.cocoachina.com/ios/20141216/10652.html?

前言:現(xiàn)在已經(jīng)不像以前那樣只有一個尺寸石洗,現(xiàn)在最少的iPhone開發(fā)需要最少需要適配三個尺寸灿巧。因此以前我們可以使用硬坐標(biāo)去設(shè)定各個控件的位置拍鲤,但是現(xiàn)在的話已經(jīng)不可以了,我們需要去做適配弟孟,也許你說可以使用兩套UI或兩套以上的UI上荡,但那樣不高效也不符合設(shè)計讶泰。iOS有兩大自動布局利器:autoresizing 和autolayout(autolayout是IOS6以后新增)扎酷。autoresizing是UIView的屬性檐涝,一直存在,使用也比較簡單,但是沒有autolayout那樣強大谁榜。如果你的界面比較簡單幅聘,要求的細(xì)節(jié)沒有那么高,那么你完全可以使用autoresizing去進行自動布局窃植。以下會針對autoresizing進行討論帝蒿。

0、autoresizing使用前的解釋:

UIViewAutoresizing是一個枚舉類型撕瞧,默認(rèn)是UIViewAutoresizingNone陵叽,也就是不做任何處理。

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

};

各屬性解釋:

UIViewAutoresizingNone

不會隨父視圖的改變而改變

UIViewAutoresizingFlexibleLeftMargin

自動調(diào)整view與父視圖左邊距丛版,以保證右邊距不變

UIViewAutoresizingFlexibleWidth

自動調(diào)整view的寬度,保證左邊距和右邊距不變

UIViewAutoresizingFlexibleRightMargin

自動調(diào)整view與父視圖右邊距偏序,以保證左邊距不變

UIViewAutoresizingFlexibleTopMargin

自動調(diào)整view與父視圖上邊距页畦,以保證下邊距不變

UIViewAutoresizingFlexibleHeight

自動調(diào)整view的高度,以保證上邊距和下邊距不變

UIViewAutoresizingFlexibleBottomMargin

自動調(diào)整view與父視圖的下邊距研儒,以保證上邊距不變

在這里說明一下豫缨,如果是經(jīng)常使用Storyboard/Xib設(shè)置autoresizing,那么轉(zhuǎn)變使用代碼設(shè)置autoresizing的話端朵,容易出現(xiàn)理解錯誤問題好芭。比如說UIViewAutoresizingFlexibleTopMargin,也許會被誤認(rèn)為是頂部距離不變冲呢,其實是底部距離不變舍败。這個解決辦法也很簡單,只需要把使用代碼和使用Storyboard設(shè)置autoresizing敬拓,它們是相反的邻薯,只需要這樣去記就可以了。

autoresizing組合使用:

也就是枚舉中的值可以使用|隔開乘凸,同時擁有多個值的功能厕诡,可以針對不同的場景作不同的變化。例如:

UIViewAutoresizingFlexibleWidth?|?UIViewAutoresizingFlexibleBottomMargin

意思是:view的寬度按照父視圖的寬度比例進行縮放营勤,距離父視圖頂部距離不變灵嫌。

其它的組合類似,我這里就不一一列舉了葛作。

注意:

1)view的autoresizesSubviews屬性為yes時(默認(rèn)為yes)寿羞,autoresizing才會生效。

2)從XCODE6開始进鸠,Storyboard&Xib默認(rèn)是自動布局稠曼,因此我們需要手動調(diào)整,才能使用autoresizing。

具體操作如圖(打開Storyboard文件霞幅,你就會看到下面圖的界面):

下面會寫一個簡單的例子以給予你們更直觀的理解漠吻,并會在本文最后附上Demo下載地址,請繼續(xù)往下觀看噢司恳。

Demo:

1)頂部距離父視圖距離不變

2)寬度按父視圖比例進行拉伸

3)view與父視圖的左邊距和右邊距不變

一途乃、使用代碼(Code)控制autoresizingMask

下面是項目用到的宏:

#define?topSpace?64#define?kMargin?20#define?kTopViewHeight?44#define?kTopViewWidth?300#define?kTextLabelWidth?200#define?kTextLabelHeight?30

沒有做適配之前的代碼:

//?以Iphone4(320,?480)為基礎(chǔ)扔傅,設(shè)置各控件的位置//?注意:必須所有控件都按照Iphone4(320耍共,?480)為基礎(chǔ)初始化一次,不然按比例縮放時會發(fā)生錯誤猎塞!UIView?*topView?=?[[UIView?alloc]?initWithFrame:CGRectMake(kMargin,?topSpace,?kTopViewWidth,?kTopViewHeight)];CGFloat?textLabelTop?=?(topView.frame.size.width?-?kTextLabelWidth)?/?2;CGFloat?textLabelWidth?=?(topView.frame.size.height?-?kTextLabelHeight)?/?2;UILabel?*textLabel?=?[[UILabel?alloc]?initWithFrame:CGRectMake(textLabelTop,?textLabelWidth,?kTextLabelWidth,?kTextLabelHeight)];//?設(shè)置文字及居中[textLabel?setText:@"Garvey"];[textLabel?setTextAlignment:NSTextAlignmentCenter];//?分別設(shè)置樣式[topView?setBackgroundColor:[UIColor?redColor]];[textLabel?setTextColor:[UIColor?whiteColor]];//?添加視圖[topView?addSubview:textLabel];[self.view?addSubview:topView];

它將會顯示:

使用autoresizing進行界面適配:

補充:你可以先按其它的設(shè)備尺寸為界面上的控件初始化试读,因為autoresizing是會以父視圖的改變而改變。

//?以Iphone4(320荠耽,?480)為基礎(chǔ)钩骇,設(shè)置各控件的位置//?注意:必須所有控件都按照Iphone4(320,?480)為基礎(chǔ)初始化一次铝量,不然按比例縮放時會發(fā)生錯誤倘屹!UIView?*topView?=?[[UIView?alloc]?initWithFrame:CGRectMake(kMargin,?kTopSpace,?kTopViewWidth,?kTopViewHeight)];CGFloat?textLabelTop?=?(topView.frame.size.width?-?kTextLabelWidth)?/?2;CGFloat?textLabelWidth?=?(topView.frame.size.height?-?kTextLabelHeight)?/?2;UILabel?*textLabel?=?[[UILabel?alloc]?initWithFrame:CGRectMake(textLabelTop,?textLabelWidth,?kTextLabelWidth,?kTextLabelHeight)];//?設(shè)置文字及居中[textLabel?setText:@"Garvey"];[textLabel?setTextAlignment:NSTextAlignmentCenter];//?分別設(shè)置樣式[topView?setBackgroundColor:[UIColor?redColor]];[textLabel?setTextColor:[UIColor?whiteColor]];//?設(shè)置文字控件的寬度按照上一級視圖(topView)的比例進行縮放[textLabel?setAutoresizingMask:UIViewAutoresizingFlexibleWidth];//?設(shè)置View控件的寬度按照父視圖的比例進行縮放,距離父視圖頂部慢叨、左邊距和右邊距的距離不變[topView?setAutoresizingMask:UIViewAutoresizingFlexibleWidth?|?UIViewAutoresizingFlexibleBottomMargin?|?UIViewAutoresizingFlexibleRightMargin?|?UIViewAutoresizingFlexibleLeftMargin];//?添加視圖[topView?addSubview:textLabel];[self.view?addSubview:topView];//?注意:重新設(shè)置topView位置的代碼纽匙,必須要寫在添加視圖的后面,不然autoresizing的位置計算會出錯拍谐!CGFloat?topViewWidth?=?kUIScreen.size.width?-?kMargin?*?2;[topView?setFrame:CGRectMake(kMargin,?kTopSpace,?topViewWidth,?kTopViewHeight)];

最后顯示:

二烛缔、在Storyboard控制autoresizingMask

Storyboard上只有兩個控件,View 和 Label赠尾。

如果我們不做任何的適配方案力穗,它將會顯示:

默認(rèn)是是貼近左上方,在Autoresizing上可以看到:

其實要做到目標(biāo)顯示那樣也是非常簡單的气嫁,兩個控件如下設(shè)置:

意思是:

1)頂部距離父視圖距離不變

2)寬度按父視圖比例進行拉伸

3)view與父視圖的左邊距和右邊距不變

最后顯示:

小結(jié):

對比以上兩個使用方法当窗,是不是覺得使用代碼去進行autoresizing的控制,會相對于比較麻煩寸宵。

如果是使用Stroyboard/Xib的話就會非常簡單崖面,只需要點擊幾個地方就可以了,看大家選擇哪種方法梯影。

Demo下載:http://pan.baidu.com/s/1qWnxsZU?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巫员,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甲棍,更是在濱河造成了極大的恐慌简识,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異七扰,居然都是意外死亡奢赂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門颈走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膳灶,“玉大人,你說我怎么就攤上這事立由≡觯” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵锐膜,是天一觀的道長毕箍。 經(jīng)常有香客問我,道長枣耀,這世上最難降的妖魔是什么霉晕? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捞奕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拄轻。我一直安慰自己颅围,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布恨搓。 她就那樣靜靜地躺著院促,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斧抱。 梳的紋絲不亂的頭發(fā)上常拓,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音辉浦,去河邊找鬼弄抬。 笑死,一個胖子當(dāng)著我的面吹牛宪郊,可吹牛的內(nèi)容都是我干的掂恕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弛槐,長吁一口氣:“原來是場噩夢啊……” “哼懊亡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乎串,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤店枣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸯两,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡闷旧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了甩卓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸠匀。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逾柿,靈堂內(nèi)的尸體忽然破棺而出缀棍,到底是詐尸還是另有隱情,我是刑警寧澤机错,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布爬范,位于F島的核電站,受9級特大地震影響弱匪,放射性物質(zhì)發(fā)生泄漏青瀑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一萧诫、第九天 我趴在偏房一處隱蔽的房頂上張望斥难。 院中可真熱鬧,春花似錦帘饶、人聲如沸哑诊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镀裤。三九已至,卻和暖如春缴饭,著一層夾襖步出監(jiān)牢的瞬間暑劝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工颗搂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留担猛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓峭火,卻偏偏與公主長得像毁习,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卖丸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 iPhone自誕生以來猜嘱,隨著其屏幕尺寸不斷的多樣化,屏幕適配的技術(shù)一直在發(fā)展更新嫁艇。目前朗伶,iOS系統(tǒng)版本已經(jīng)更...
    VV木公子閱讀 15,384評論 24 170
  • 1.尺寸適配1.原因 iOS7中所有導(dǎo)航欄都為半透明,導(dǎo)航欄(height=44)和狀態(tài)欄(height=20)不...
    LZM輪回閱讀 6,114評論 1 4
  • 屏幕適配 本章節(jié)主要還是說明如何讓應(yīng)用程序能夠適配在蘋果不同的屏幕和如何讓應(yīng)用中的內(nèi)容在不同的屏幕下能夠正常的放置...
    AlanGe閱讀 700評論 0 2
  • 翻譯自“Auto Layout Guide”步咪。 1 入門 1.1 理解自動布局 自動布局根據(jù)視圖層級結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,580評論 3 26
  • 在這些天我會和我的隊友們彼此留下這輩子永遠也忘記不了的羈絆论皆,在他們的身上留下我永遠的足跡。載著這樣的思索猾漫,我開始了...
    乄鎭鈊愛妳_d484閱讀 199評論 0 0