iOS 11 導航欄的坑(隱藏導航欄,透明漸變的導航欄,titleView)

這里不說原理,不說iOS 11更新了什么功能,只告訴你遇到這樣的問題怎么改,就是這么簡單粗暴

一、隱藏導航欄

self.navigationController.navigationBar.hidden = YES;

隱藏可以說是非常簡單了,就一句代碼搞定。但是如果隱藏導航欄又遇到了scrollView(scrollVIew當然包括tableVIew?。。?,就會發(fā)現(xiàn)在iOS 11手機里,頁面頂部有一個20像素的空白,不是一般的丑。解決這個問題很簡單,也差不多四舍五入是一句:

if (@available(iOS 11.0, *)){//避免滾動視圖頂部出現(xiàn)20的空白以及push或者pop的時候頁面有一個上移或者下移的異常動畫的問題
        [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
    }

上面這句添加到AppDelegate 里面就完美的解決了。

二、導航欄透明漸變

透明漸變是什么意思呢,就是剛進入頁面的時候?qū)Ш綑谑峭该鞯?,然后隨著scrollView 的滑動,改變導航欄的透明度。

第一種解決方案:
隱藏導航欄,然后自定義一個View 裝作是導航欄的樣子,這種方法大家都會,不多說。

第二種解決方案:
在 viewWillAppear 中通過 setBackgroundImage 方法實現(xiàn):

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:0]] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:0]]];

在 viewWillDisappear 中置為 nil :

[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:nil];

在scrollView的代理方法 scrollViewDidScroll: 中改變導航欄的 alpha 值:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:alpha]] forBarMetrics:UIBarMetricsDefault];

如果導航欄下面需要那條黑線的話,那么也要改變那條線的 alpha 值:

[self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:alpha]]];

解決透明并且漸變的問題了,第一個和第二個問題是可以互通的,主要解決不顯示導航欄的問題。

三、自定義titleView的問題

我們自定義titleView主要是這句話:

self.navigationItem.titleView = customView;

在iOS 11 中,發(fā)現(xiàn)不能改變 titleView 的 frame ,就縮在中間那一坨。這里只給出最終的解決方法:
1.customView 用懶加載來創(chuàng)建;
2.在懶加載里用添加子視圖的方法添加titleView;

[self.navigationController.navigationBar addSubview:customView];

3.在 viewWillAppear 方法中設(shè)置 customView.hidden = NO;
在 viewWillDisappear 方法中設(shè)置 customView.hidden = YES;


以上是我剛剛遇到的 iOS 11 中與導航欄有關(guān)的問題及解決辦法,親測有效,僅供參考,歡迎指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 14,996評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,683評論 25 709
  • 本篇文章關(guān)于Mysql鎖的一些知識點,比較雜亂,后續(xù)會整理更新。 背景: 鎖概念: 鎖是數(shù)據(jù)庫系統(tǒng)區(qū)別于文件系統(tǒng)的...
    ericsonyc閱讀 1,257評論 0 3

友情鏈接更多精彩內(nèi)容