欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解iOS應(yīng)用開發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法

 更新時(shí)間:2016年03月23日 09:11:15   作者:ForeverYoung21  
這篇文章主要介紹了iOS應(yīng)用開發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法,文中講解了使用代碼和Storyboard兩種方式調(diào)節(jié)autoresizing的方法,示例代碼為Objective-C,需要的朋友可以參考下

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

零、autoresizing使用前的解釋:

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

復(fù)制代碼 代碼如下:

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
};

各屬性解釋:

201632390817501.png (731×400)

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

autoresizing組合使用:

也就是枚舉中的值可以使用|隔開,同時(shí)擁有多個(gè)值的功能,可以針對不同的場景作不同的變化。例如:

UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
意思是:view的寬度按照父視圖的寬度比例進(jìn)行縮放,距離父視圖頂部距離不變。

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

注意:

1)view的autoresizesSubviews屬性為yes時(shí)(默認(rèn)為yes),autoresizing才會(huì)生效。

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

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

201632390848702.jpg (502×694)

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

Demo:

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

2)寬度按父視圖比例進(jìn)行拉伸

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

201632390909858.png (564×540)

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

下面是項(xiàng)目用到的宏:

復(fù)制代碼 代碼如下:

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

沒有做適配之前的代碼:
復(fù)制代碼 代碼如下:

// 以Iphone4(320, 480)為基礎(chǔ),設(shè)置各控件的位置
// 注意:必須所有控件都按照Iphone4(320, 480)為基礎(chǔ)初始化一次,不然按比例縮放時(shí)會(huì)發(fā)生錯(cuò)誤!
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];

它將會(huì)顯示:

201632390930508.jpg (244×188)

使用autoresizing進(jìn)行界面適配:

補(bǔ)充:你可以先按其它的設(shè)備尺寸為界面上的控件初始化,因?yàn)閍utoresizing是會(huì)以父視圖的改變而改變。

復(fù)制代碼 代碼如下:

// 以Iphone4(320, 480)為基礎(chǔ),設(shè)置各控件的位置
// 注意:必須所有控件都按照Iphone4(320, 480)為基礎(chǔ)初始化一次,不然按比例縮放時(shí)會(huì)發(fā)生錯(cuò)誤!
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è)置文字控件的寬度按照上一級(jí)視圖(topView)的比例進(jìn)行縮放
[textLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
// 設(shè)置View控件的寬度按照父視圖的比例進(jìn)行縮放,距離父視圖頂部、左邊距和右邊距的距離不變
[topView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
 
// 添加視圖
[topView addSubview:textLabel];
[self.view addSubview:topView];
 
// 注意:重新設(shè)置topView位置的代碼,必須要寫在添加視圖的后面,不然autoresizing的位置計(jì)算會(huì)出錯(cuò)!
CGFloat topViewWidth = kUIScreen.size.width - kMargin * 2;
[topView setFrame:CGRectMake(kMargin, kTopSpace, topViewWidth, kTopViewHeight)];

最后顯示:

201632390950869.png (564×540)

二、在Storyboard控制autoresizingMask

autoresizingMask無論是在storyboard中實(shí)現(xiàn)還是用代碼實(shí)現(xiàn),本質(zhì)上來說就是六條線。

在storyboard中使用autoresizingMask需要將Autolayout禁用掉。

如圖:

201632391014574.png (488×124)

圖中共有六條線(上下左右到外圍的距離線和內(nèi)部的兩條線)。

如果上下左右的線中的某一條選中,則表示距離父控件的邊界的距離不變。

比如圖中選中左和上的線,表示藍(lán)色view距離self.view的左邊界和上邊界的距離不變。

如果同時(shí)選中上下左右的線,那么行為會(huì)和選中上左的線是一樣的,也就是默認(rèn)的行為。

如果想讓子控件尺寸跟隨父控件尺寸改變而改變,那么需要用到內(nèi)部的兩條線。內(nèi)部的線表示允許控件在水平和垂直方向上可拉伸。如果不選中內(nèi)部的線,說明是不希望控件可拉伸的,也就是固定大小的。

也就是說,周圍的線選中表示固定距離,內(nèi)部的線選中表示允許拉伸。

如果用代碼設(shè)置autoresizingMask,會(huì)發(fā)現(xiàn)一個(gè)view的autoresizingMask屬性是一個(gè)枚舉:

復(fù)制代碼 代碼如下:

UIViewAutoresizingNone                 = 0,
UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
UIViewAutoresizingFlexibleWidth        = 1 << 1,
UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
UIViewAutoresizingFlexibleHeight       = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5

除了第一個(gè)是None,剩下的六個(gè)就對應(yīng)storyboard中的六條線。

注意上面

復(fù)制代碼 代碼如下:

UIViewAutoresizingFlexibleWidth
UIViewAutoresizingFlexibleHeight

這是正好和storyboard中設(shè)置autoresizingMask中內(nèi)部的兩天線是一致的:可拉伸的寬度和高度。

剩下的需要注意一下:

復(fù)制代碼 代碼如下:

UIViewAutoresizingFlexibleLeftMargin
UIViewAutoresizingFlexibleRightMargin 
UIViewAutoresizingFlexibleTopMargin   
UIViewAutoresizingFlexibleBottomMargin

在storyboard中,如果選中周圍的線,表示距離固定。比如我選中了左邊的線,那么表示我想要左邊的距離固定,所以在代碼中我應(yīng)該選擇UIViewAutoresizingFlexibleRightMargin,即表示右邊的距離不固定,那么則默認(rèn)左邊的距離固定。

autoresizingMask的缺點(diǎn)是只能保證父控件和子控件間的關(guān)系,無法保證同級(jí)控件間的關(guān)系,也就是說有些需求,autoresizingMask是無法實(shí)現(xiàn)的。更多的精力應(yīng)該放在Autolayout上。

相關(guān)文章

  • iOS無障礙適配西瓜視頻Voice?Over實(shí)踐示例

    iOS無障礙適配西瓜視頻Voice?Over實(shí)踐示例

    本文從研發(fā)的視角出發(fā),講述了如何使用?Voice?Over、如何適配?Voice?Over?以及適配過程中如果遇到問題應(yīng)該如何解決。希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • ios開發(fā)中時(shí)間轉(zhuǎn)換的方法集錦

    ios開發(fā)中時(shí)間轉(zhuǎn)換的方法集錦

    這篇文章主要介紹了ios開發(fā)中時(shí)間轉(zhuǎn)換的方法集錦,需要的朋友可以參考下
    2015-05-05
  • 12個(gè)iOS技術(shù)面試題及答案總結(jié)

    12個(gè)iOS技術(shù)面試題及答案總結(jié)

    這篇文章給大家總結(jié)了在iOS面試的時(shí)候可能會(huì)遇到的12個(gè)技術(shù)面試題,以及這些面試題但答案,這些答案只是給大家一些參考,大家可以再結(jié)合自己理解進(jìn)行回答,有需要的朋友們下面來一起看看吧。
    2016-09-09
  • 開發(fā)繪圖、手勢綜合App注意點(diǎn)

    開發(fā)繪圖、手勢綜合App注意點(diǎn)

    本篇文章主要給大家詳細(xì)講述了在IOS開發(fā)繪圖、手勢綜合App容易遇到的坑以及注意事項(xiàng)等內(nèi)容,有興趣的朋友參考下吧。
    2018-02-02
  • iOS中使用UIDatePicker制作時(shí)間選擇器的實(shí)例教程

    iOS中使用UIDatePicker制作時(shí)間選擇器的實(shí)例教程

    這篇文章主要介紹了iOS中使用UIDatePicker制作時(shí)間選擇器的實(shí)例教程,實(shí)例中未選中的時(shí)間項(xiàng)目會(huì)講解一個(gè)將其變透明的方法,非常給力,需要的朋友可以參考下
    2016-05-05
  • IOS Xcode調(diào)試常用命令和斷點(diǎn)整理

    IOS Xcode調(diào)試常用命令和斷點(diǎn)整理

    這篇文章主要介紹了IOS Xcode調(diào)試常用命令和斷點(diǎn)整理的相關(guān)資料,這里對IOS Xcode調(diào)試常用命令進(jìn)行了總結(jié),需要的朋友可以參考下
    2016-12-12
  • 老生常談iOS應(yīng)用程序生命周期

    老生常談iOS應(yīng)用程序生命周期

    下面小編就為大家?guī)硪黄仙U刬OS應(yīng)用程序生命周期。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • iOS xib文件中添加ScrollView約束的方法

    iOS xib文件中添加ScrollView約束的方法

    下面小編就為大家分享一篇iOS xib文件中添加ScrollView約束的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS坐標(biāo)系的深入探究

    iOS坐標(biāo)系的深入探究

    這篇文章主要給大家介紹了關(guān)于iOS坐標(biāo)系的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • iOS之基于FreeStreamer的簡單音樂播放器示例

    iOS之基于FreeStreamer的簡單音樂播放器示例

    這篇文章主要介紹了iOS之基于FreeStreamer的簡單音樂播放器示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11

最新評(píng)論