你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS中UI適配相關簡介

iOS中UI適配相關簡介

編輯:關於IOS

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即可

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved