圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問題
首先說明下,ios7中,由于status bar不再占用單獨(dú)的20px,如果app需要同時(shí)支持ios7和ios6.1以下,那就需要適配下了,適配開始:
先看用xcode新建項(xiàng)目后 IOS7和IOS6上的的運(yùn)行效果:
ps:一個(gè)empty application 里面+了一個(gè)rootcontroller,作為window的根控制器,view里面放了一個(gè)tableview;


是不是遇到的IOS7的新問題,狀態(tài)欄跟tableview重疊了,OK,看見這個(gè)不想看到的結(jié)果,下面我們就開始正式的解決掉這個(gè)招人不喜歡的效果。
第一步:不要勾選xib中的Use Autolayout,如下圖:

第二步:第二步:選擇View as “ios6.1 and Earlier”,還是上圖位置處;
第三步:在Size Inspector中,有一ios6/7 Deltas:分別表示在PosX的增量、PosY的增量、寬度增量、高度增量。

ps:在“ios6.1 and Earlier”模式下,由于status bar的高度為20,所以當(dāng)app運(yùn)行在ios7.0模式下時(shí),需要view向下移動20像素,因此在ΔY上設(shè)置為20.
tableView坐標(biāo)向下移動了20,由于整個(gè)屏幕的高度是不變的,所以在“ios7.0 and Later”模式下,需要將tableView的高度減去20像素,即在“ios6.1 and Earlier”模式下,設(shè)置tableView的ΔHeight為 -20。如果不設(shè)置ΔHeight,tableView底部會有20像素是不可見的,可以測試demo看看。
***注***:Δ,正數(shù)表示增,負(fù)數(shù)表示減。
第四步:ok,設(shè)置完成,到IOS上看效果:

是不是神奇的發(fā)現(xiàn)跟以前的有似曾相識的趕腳呢。。。這樣“ios6.1 and Earlier”和“ios7.0 and Later” UI布局便統(tǒng)一了。
另一種方法
上面通過XIB的設(shè)置達(dá)到了狀態(tài)欄和view重合的問題,接下來我們講一講網(wǎng)傳的修改window frame方法。
先上步驟:
第一:在appdeletage里面 添加如下代碼:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.window.frame = CGRectMake(0.0f,20.0f,self.window.frame.size.width,self.window.frame.size.height-20.0f);
}
2.在info.plist文件里面 屬性:View controller-based status bar appearance 值設(shè)為NO。
下面看效果:


在看下圖,你會發(fā)現(xiàn)一個(gè)問題:

這是什么原因?qū)е碌哪??我發(fā)現(xiàn),由于window你又548變成了528吧,但是你發(fā)現(xiàn)tableview的高度還是548,導(dǎo)致了有20個(gè)像素不能顯示。那有的同學(xué)會說,直接改成528不就得了么,是的,可以改,改后你發(fā)現(xiàn)IOS7上確實(shí)沒有了缺像素的問題,但是在IOS6有直接缺半截,看下圖:


所以呢,由我親自測試,這種方法想要適配IOS7和IOS6有點(diǎn)不太靠譜。
最后解釋一下幾個(gè)名詞設(shè)置的作用:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
return NO;
}
在plist中設(shè)置View controller-based status bar appearance 值設(shè)為YES..
這些的作用是:基于controller,動態(tài)控制statusbar的隱藏與樣式。
- iOS 自定義狀態(tài)欄和導(dǎo)航欄詳細(xì)介紹
- 詳解在iOS App中自定義和隱藏狀態(tài)欄的方法
- iOS實(shí)現(xiàn)點(diǎn)擊狀態(tài)欄自動回到頂部效果詳解
- iOS 隱藏導(dǎo)航條和狀態(tài)欄實(shí)現(xiàn)方法
- iOS 設(shè)置狀態(tài)欄的背景顏色方法
- 深入理解iOS的狀態(tài)欄
- iOS在狀態(tài)欄上顯示提醒信息的功能定制
- IOS點(diǎn)擊按鈕隱藏狀態(tài)欄詳解及實(shí)例代碼
- IOS 開發(fā)狀態(tài)欄隱藏的實(shí)現(xiàn)辦法
- iOS狀態(tài)欄、導(dǎo)航欄的一些筆記分享
相關(guān)文章
iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決
大家都知道WebViewJavascriptBridge它主要幫助我們優(yōu)雅的實(shí)現(xiàn)OC與JS的交互,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
iOS實(shí)現(xiàn)從通訊錄中選擇聯(lián)系人
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)從通訊錄中選擇聯(lián)系人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
講解iOS開發(fā)中UITableView列表設(shè)計(jì)的基本要點(diǎn)
這篇文章主要介紹了講解iOS開發(fā)中UITableView列表設(shè)計(jì)的基本要點(diǎn),其中對列表行操作的常用操作舉例是iOS開發(fā)中經(jīng)常用到的基礎(chǔ),需要的朋友可以參考下2016-01-01
iOS 封裝導(dǎo)航欄及返回,獲取控件所在控制器的實(shí)例
下面小編就為大家分享一篇iOS 封裝導(dǎo)航欄及返回,獲取控件所在控制器的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01

