iPhone5的新分辨率着實啃爹了一把,剛下完xcode4.5想玩玩iphone5的長螢幕效果,順便研究下怎麼去相容它。
app在ios6的4inch的顯示效果。。果然傳說中的上下兩個小黑邊~放個adbanner還不錯。。。
繼續,開始修複黑邊~~這一步隻要在config裡多加一張4inch的launch圖檔就能搞定
這樣如下圖,讓layout上對齊,并且actionSheet顯示正常~
最後用宏替換掉寫死的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改了下,效果還不錯啦~
搞完洗洗睡了~~
【更新】有同學和我反映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帶來的相容性問題。