iOS中UI適配相關簡介

來源:互聯網
上載者:User

iPhone5出來已經很久了,因為螢幕尺寸的改變,程式對於UI的靈活操控就顯的尤為重要

其實這次的總結還是用的老API中相關的屬性,只不過以前我們沒有深入的考慮,或者說是我沒有深入考慮吧

先從viewController的view說起吧(以下代碼全部為ARC環境下)手動建立view都是從loadView方法中初始化viewController的self.view,這裡說API中的屬性:

1、[UIScreen mainScreen].bounds,螢幕的bounds,

2、[UIScreen mainScreen].applicationFrame,app的frame,當app的statusBar隱藏時,它跟[UIScreen mainScreen].bounds實際是一樣的

我一般這麼建立view:self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

此時view的frame在iPhone5是0,20,320,548,之前的iPhone是0,20,320,460,

之後viewController的self.view的frame會自動在viewWillAppear方法中重新變化,自動適配螢幕的尺寸,也就是說,如果你有navigationBar,那麼此時view的frame是0,20,320,504(iPhone5),我在以前都是手動在loadView的時候減44的,不知道有沒有跟我一樣的。。。

好了,說了這麼多,一句話總結就是,你controller的self.view會在viewWillAppear把自己的frame設定為除了statusBar和navigationBar,充滿螢幕的尺寸,如果沒有了statusBar和navigationBar或者它們之一,self.view的frame依然是充滿螢幕的

下面就是UIView的一個適配上很重要的屬性了:autoresizingMask,它的作用是,superView的frame變化後,它在superView中的位置或大小如何變化,它的屬性如下:

enum {    

UIViewAutoresizingNone                 = 0,    

UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,    

UIViewAutoresizingFlexibleWidth        = 1 << 1,    

UIViewAutoresizingFlexibleRightMargin  = 1 << 2,    

UIViewAutoresizingFlexibleTopMargin    = 1 << 3,    

UIViewAutoresizingFlexibleHeight       = 1 << 4,    

UIViewAutoresizingFlexibleBottomMargin = 1 << 5 

}; 

typedef NSUInteger UIViewAutoresizing;

舉個例子,假如你的背景中有個button,你希望這個button無論什麼時候,距離這個背景底部的高度都是固定的,那你只需要設定button的autoresizingMask為UIViewAutoresizingFlexibleTopMargin。

讓我們來看一下UIViewAutoresizingFlexibleTopMargin的定義:The view resizes by expanding or shrinking in the direction of the top margin.就是說它在superview中,距離頂部的位置是可變的

如果同時設定UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin,那麼它在superview中的新位置(這裡的新位置,指的是superView的frame變化後的位置)會是舊位置乘以一個比例因數得出。

比例因數為:superView當前高度 - 它的高度 / superView原高度 - 它的高度

有了這兩個知識點,就可以輕鬆適配iPhone5和之前的螢幕了,比如某個特定viewB中有個元素A,你希望A無論在iPhone5還是4s都是在B中距離B的底部20px,那你只需要設定它的autoresizingMask為UIViewAutoresizingFlexibleTopMargin,並且在controller的viewWillAppear設定一下B的新frame即可

如需轉載,請註明出處

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.