天天看點

【iOS】對于iPhone5分辨率相容性調整問題

iPhone5的新分辨率着實啃爹了一把,剛下完xcode4.5想玩玩iphone5的長螢幕效果,順便研究下怎麼去相容它。

app在ios6的4inch的顯示效果。。果然傳說中的上下兩個小黑邊~放個adbanner還不錯。。。

【iOS】對于iPhone5分辨率相容性調整問題
【iOS】對于iPhone5分辨率相容性調整問題

繼續,開始修複黑邊~~這一步隻要在config裡多加一張4inch的launch圖檔就能搞定

【iOS】對于iPhone5分辨率相容性調整問題

這樣如下圖,讓layout上對齊,并且actionSheet顯示正常~ 

【iOS】對于iPhone5分辨率相容性調整問題

最後用宏替換掉寫死的460,

#define ScreenHeight [[UIScreen mainScreen] bounds].size.height
#define ScreenWidth [[UIScreen mainScreen] bounds].size.width
#define StateBarHeight 20
#define MainHeight (ScreenHeight - StateBarHeight)
#define MainWidth ScreenWidth      

挑了張比較簡單的view改了下,效果還不錯啦~

【iOS】對于iPhone5分辨率相容性調整問題

搞完洗洗睡了~~

【更新】有同學和我反映xib沒法搞

其實apple早就給我們想好了用autolayout就能解決,但是這種方案的相容性并不好,這裡就不叙述了

我的做法是在m檔案裡映射那個需要定位的控件IBOutlet

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //for ip5
    CGRect rect = button.frame;
    rect.origin.y = MainHeight - rect.size.height;
    button.frame = rect;
}      

 在load方法裡植入相容代碼就可以了。

另外有時候外層view的大小是不可見的,導緻在下部的控件沒有辦法被使用者觸發,這是因為view的frame是直接由xib指派,ip4一般直接指派460,是以需要對frame進行重置

另外如果要直接相容先前的xib可以這樣在class 的 viewDidLoad裡寫:

//for ip5
    CGRect mainRect = self.view.frame;
    mainRect.size.height = ScreenHeight;
    self.view.frame = mainRect;      

另外可能需要判斷ip5的宏定義,我這裡提供一個:

#define isIPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)      

這樣基本能解決xib來init帶來的相容性問題。