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

詳解iOS中UIView的layoutSubviews子視圖布局方法使用

 更新時(shí)間:2016年04月27日 09:17:53   作者:pengyingh  
這篇文章主要介紹了iOS中UIView的layoutSubviews子視圖布局方法使用,文中舉了一個(gè)layoutSubviews在iPad橫豎屏切換時(shí)被調(diào)用用來(lái)重新布局的實(shí)例,需要的朋友可以參考下

概念
在UIView里面有一個(gè)方法layoutSubviews:

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

- (void)layoutSubviews;    // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing.

layoutSubviews方法的具體作用
layoutSubviews是對(duì)subviews重新布局。比如,我們想更新子視圖的位置的時(shí)候,可以通過(guò)調(diào)用layoutSubviews方法,既可以實(shí)現(xiàn)對(duì)子視圖重新布局。
layoutSubviews默認(rèn)是不做任何事情的,用到的時(shí)候,需要在自雷進(jìn)行重寫。

實(shí)例
由于ipad的橫豎屏不同,所以好的應(yīng)用,橫豎屏的頁(yè)面布局也不一樣。那么就需要橫豎屏的整體解決方案。先看一個(gè)橫豎屏布局不一樣的界面。
下面兩張圖是來(lái)自同一個(gè)界面的橫豎版的截屏??梢钥闯觯瑱M豎版顯示的內(nèi)容相同,但是界面布局不同。要實(shí)現(xiàn)上述布局,主要是運(yùn)用UIView中 layoutSubviews方法。當(dāng)UIView設(shè)置為自動(dòng)適配屏幕時(shí),當(dāng)用戶旋轉(zhuǎn)設(shè)備的時(shí)候,會(huì)調(diào)用layoutSubviews方法,我們只需重寫 這個(gè)方法,然后判斷用戶屏幕的方向。在調(diào)整每個(gè)空間的位置即可。

201642791446629.jpg (360×480)

201642791505056.jpg (640×480)

下面是實(shí)現(xiàn)上述界面的最簡(jiǎn)單的原型:
首先分析可以知道左面是圖片,右面是一個(gè)圖片加文字的視圖。下面就實(shí)現(xiàn)一個(gè)左面視圖右面是一個(gè)圖加一段字的事例。
事例的截圖如下

201642791524044.png (372×480)

201642791543249.png (549×423)

其中右面的文字和綠色部分是用一個(gè)子視圖封裝的。
整個(gè)布局是我在主視圖中添加了一個(gè)ContentView視圖,在ContentView視圖中添加了一個(gè)ArticleView視圖。
其中ArticleView和ContentView的xib文件都打開了

201642791604398.png (212×64)

在ContentView中重寫layoutSubviews方法,然后根據(jù)stausbar的方向判斷當(dāng)前視圖的橫豎屏。具體代碼:

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

-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//翻轉(zhuǎn)為豎屏?xí)r
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//翻轉(zhuǎn)為橫屏?xí)r
[self setHorizontalFrame];
}
}

-(void)setVerticalFrame
{
NSLog(@"豎屏");
[titleLable setFrame:CGRectMake(283, 0, 239, 83)];
[leftView setFrame:CGRectMake(38, 102, 384, 272)];
[rightView setFrame:CGRectMake(450, 102, 282, 198)];
}

-(void)setHorizontalFrame
{
NSLog(@"橫屏");
[titleLable setFrame:CGRectMake(183, 0, 239, 83)];
[leftView setFrame:CGRectMake(168, 122, 384, 272)];
[rightView setFrame:CGRectMake(650, 122, 282, 198)];
}


在具體的橫豎屏方法中,從新設(shè)置各個(gè)組件的坐標(biāo)即可。

接下來(lái)在ContentView中添加ArticleView視圖。

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

-(id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) {

NSArray *arrayContentView =[[NSBundle mainBundle] loadNibNamed:@"ArticleView" owner:self options:nil];
rightView=[arrayContentView objectAtIndex:0];
[self addSubview:rightView];
}
return self;
}


由于我用的是xib,所以初始化方法為initWithCoder,在這個(gè)中添加新的視圖。

同樣在ArticleView中設(shè)置橫豎屏相應(yīng)空間的坐標(biāo)即可。

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

-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
CGRect rect=self.frame;
rect.size.width=282;
rect.size.height=198;
[self setFrame:rect];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//翻轉(zhuǎn)為豎屏?xí)r
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//翻轉(zhuǎn)為橫屏?xí)r
[self setHorizontalFrame];
}
}

-(void)setVerticalFrame
{
NSLog(@"豎屏");
[contentView setFrame:CGRectMake(12, 6, 250, 125)];
[textLable setFrame:CGRectMake(50, 139, 182, 39)];
}

-(void)setHorizontalFrame
{
NSLog(@"橫屏");
[contentView setFrame:CGRectMake(12, 6, 106, 158)];
[textLable setFrame:CGRectMake(135, 11, 147, 39)];
}

總結(jié)
layoutSubviews以下情況會(huì)被調(diào)用:

蘋果官方文檔已經(jīng)強(qiáng)調(diào),不能直接調(diào)用layoutSubviews對(duì)子視圖進(jìn)行重新布局。那么,layoutSubviews什么情況下會(huì)被調(diào)用呢?通過(guò)百度搜索,發(fā)現(xiàn)以下幾種情況layoutSubviews會(huì)被調(diào)用。

  • 直接調(diào)用setLayoutSubviews。(這個(gè)在上面蘋果官方文檔里有說(shuō)明)
  • addSubview的時(shí)候。
  • 當(dāng)view的frame發(fā)生改變的時(shí)候。
  • 滑動(dòng)UIScrollView的時(shí)候。
  • 旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件。
  • 改變一個(gè)UIView大小的時(shí)候也會(huì)觸發(fā)父UIView上的layoutSubviews事件。

我簡(jiǎn)單測(cè)試了一下,上面基本都會(huì)被調(diào)用。 注意:

當(dāng)view的fram的值為0的時(shí)候,`addSubview`也不會(huì)調(diào)用`layoutSubviews`的。
layoutSubviews方法在對(duì)自雷視圖進(jìn)行布局的時(shí)候非常方便??梢宰约簞?dòng)手,深入理解layoutSubviews的調(diào)用機(jī)制。

相關(guān)文章

  • IOS開發(fā)環(huán)境windows化攻略

    IOS開發(fā)環(huán)境windows化攻略

    本人主要介紹了IOS開發(fā)環(huán)境windows化攻略,需要的朋友可以參考下
    2013-06-06
  • iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解

    iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解

    在開發(fā)中我們經(jīng)常遇到這樣的需求:在UITextField或者UITextView中限制用戶可以輸入的最大字符數(shù)。但在UITextView , UITextfield 中有很多坑,網(wǎng)上的方法也很多。但是并不是很全面吧,這里全面進(jìn)行了總結(jié),有需要的朋友們可以參考借鑒,下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例

    iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例

    下面小編就為大家分享一篇iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    這篇文章給大家詳細(xì)介紹了iOS應(yīng)用程序之間跳轉(zhuǎn)的幾種情況,包括跳轉(zhuǎn)到另一個(gè)程序的主界面、跳轉(zhuǎn)到另一個(gè)程序的指定界面以及如何從目標(biāo)程序的非主頁(yè)界面回到當(dāng)前(跳轉(zhuǎn)前)程序呢?有需要的朋友們可以下面來(lái)一起看看。
    2016-09-09
  • iOS中的二級(jí)菜單及Cell的展開收起示例

    iOS中的二級(jí)菜單及Cell的展開收起示例

    本篇文章主要介紹了iOS中的二級(jí)菜單及Cell的展開收起示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • ios swift3.0實(shí)現(xiàn)二維碼掃描、生成、識(shí)別示例代碼

    ios swift3.0實(shí)現(xiàn)二維碼掃描、生成、識(shí)別示例代碼

    本篇文章主要介紹了ios swift3.0實(shí)現(xiàn)二維碼掃描、生成、識(shí)別示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • iOS狀態(tài)欄、導(dǎo)航欄的一些筆記分享

    iOS狀態(tài)欄、導(dǎo)航欄的一些筆記分享

    這篇文章主要給大家分享了關(guān)于iOS中狀態(tài)欄、導(dǎo)航欄的一些筆記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • iOS?button響應(yīng)流程圖文詳解

    iOS?button響應(yīng)流程圖文詳解

    這篇文章主要為大家介紹了iOS?button響應(yīng)流程圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解 swift3.0 可選綁定共用同一塊內(nèi)存空間的實(shí)例

    詳解 swift3.0 可選綁定共用同一塊內(nèi)存空間的實(shí)例

    這篇文章主要介紹了詳解 swift3.0 可選綁定共用同一塊內(nèi)存空間的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • IOS 字符串常用處理詳細(xì)介紹

    IOS 字符串常用處理詳細(xì)介紹

    這篇文章主要介紹了IOS 字符串常用處理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論