iPhone5的新解析度著實啃爹了一把,剛下完xcode4.5想玩玩iphone5的長螢幕效果,順便研究下怎麼去相容它。
app在ios6的4inch的顯示效果。。果然傳說中的上下兩個小黑邊~放個adbanner還不錯。。。
繼續,開始修複黑邊~~這一步只要在config裡多加一張4inch的launch圖片就能搞定
這樣如,讓layout上對齊,並且actionSheet顯示正常~
最後用宏替換掉寫死的460,
C代碼
- #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
C代碼
- - (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裡寫:
C代碼
- //for ip5
- CGRect mainRect = self.view.frame;
- mainRect.size.height = ScreenHeight;
- self.view.frame = mainRect;
另外可能需要判斷ip5的宏定義,我這裡提供一個:
C代碼
- #define isIPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
這樣基本能解決xib來init帶來的相容性問題。
轉自:http://leyteris.iteye.com/blog/1682624