導航欄備忘2018

吐槽

iPhoneX出來之后稠茂,隱藏導航欄柠偶,用自定義視圖替代的方式越來越麻煩情妖。不過,蘋果的導航欄操作實在太麻煩诱担。所以將用到過的內(nèi)容記錄一下毡证,作為備忘錄。

設置位置

一般來說蔫仙,導航欄的設置我們習慣在viewDidLoad中做料睛,本來是沒有問題的,可是在iOS11之后摇邦,有些設置就會不起作用恤煞。將導航欄設置代碼移動到viewWillAppear中,就能起效果施籍。特別是導航欄的半透明效果self.navigationController.navigationBar.translucent = NO;居扒,已經(jīng)有人發(fā)現(xiàn)這個問題了:
iOS新版本導航欄透明度設置發(fā)現(xiàn)的問題

設置方式

分為全局方式和單獨方式兩種,以設置背景圖片為例:

  • 全局方式:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"圖片名字"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];
  • 單獨方式:
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"圖片名字"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
  • 推薦的方式:單獨方式法梯,也就是以self.navigationController.navigationBar為消息發(fā)送對象的方法。

  • 注意的問題:全局方式有可能不成功犀概。比如有三個tab的頁面立哑,用全局的方式設置。啟動的時候姻灶,第一個tab頁铛绰,一般是首頁,設置不成功产喉。切換到另外兩個捂掰,都是設置成功的。現(xiàn)在又切回首頁曾沈,也設置成功了这嚣,很奇怪的現(xiàn)象。

  • 如果兩種方式一起設置塞俱,那么全局的設置很可能被覆蓋姐帚,下面的“去掉半透明效果”一節(jié)進行了這樣的對比。

結論:self.navigationController.navigationBar的方式設置導航欄障涯,如果是公共部分罐旗,可以放在基類中實現(xiàn)復用。

去灰線

導航欄下面的灰色分隔線唯蝶,高度為0.5九秀,也就是通常說的1像素線。大多數(shù)情況下粘我,這根灰線是需要的鼓蜒。不過,有些時候,需要去掉友酱。比如晴音,那種全面屏設計,導航欄和緊挨著的第一個視圖背景色一樣缔杉,這個時候多一根灰線就很難看了锤躁。
怎么去掉呢?有方法是查詢高度為0.5的視圖或详,然后隱藏系羞。這種方法能起效果,不過總感覺不優(yōu)雅霸琴。下面這篇文章椒振,采用設置導航欄的陰影視圖為空的方法,感覺挺不錯的:
IOS 去掉導航欄(UINavigationBar)下方的橫線

這個不需要全局做梧乘,在有需要的UIViewController中做就可以了:

    // 去掉導航欄下面的黑線
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];

去掉半透明效果

  • 默認是半透明效果的

  • 可以在故事版上修改澎迎,如圖:

image.png

把勾打掉就可以了

  • 也可以在基類中用代碼修改:
self.navigationController.navigationBar.translucent = NO;

注意要加在viewWillAppear中,放在viewDidLoad中可能不起作用选调。

  • 不去掉的話夹供,布局會偏移;

  • 不去掉的話仁堪,顏色會被自動修改掉哮洽,像下面這樣:

image.png
  • 全局設置的版本,不要采用弦聂。既然放在基類中了鸟辅,相當于全局的。當然效果也是有的莺葫。
[UINavigationBar appearance].translucent = NO;

不過匪凉,要注意的是,像下面這樣設置捺檬,全局的效果會被覆蓋掉洒缀。像下面這樣設置,半透明效果還在欺冀,全局設置沒有起作用树绩。

self.navigationController.navigationBar.translucent = YES;
[UINavigationBar appearance].translucent = NO;

當然,把上面兩句話放在viewDidLoad中又有效果了隐轩,因為此時self.navigationController.navigationBar.translucent = YES;被覆蓋了饺饭,這樣很混亂,不如固定用一種方式职车。

設置導航欄標題的顏色和字體

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:19.0]}];

非常不方便瘫俊,放在基類中統(tǒng)一設置一下鹊杖,一般UI也是希望統(tǒng)一的。

設置導航欄背景顏色

   // 設置導航欄背景顏色
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];

直接叫backgroundColor多方便扛芽,非要搞出個barTintColor骂蓖,不知道是哪個腦殘想出來的。

設置返回按鈕旁邊的文字川尖。

默認是上一個頁面的標題登下,感覺不是很好。統(tǒng)一給一個@“返回”叮喳,或者干脆給一個@“”被芳。

// 設置返回按鈕旁邊的文字
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:(UIBarButtonItemStylePlain) target:nil action:nil];

設置左右按鈕文字顏色

// 設置導航欄左右按鈕文字的顏色
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

這個名字取的也很差,tintColor馍悟,什么鬼畔濒?蘋果的腦殘可真多。

image.png

自動隱藏TabBar

TabBar只需要在第一級出現(xiàn)就可以了锣咒,內(nèi)部的頁面侵状,一般都應該隱藏掉。

  • 默認是不隱藏的毅整,所以TabBar一直在趣兄,對于二三級頁面,減小了空間毛嫉,也帶來隨意切換的邏輯混亂诽俯。

  • 可以通過故事版切換妇菱,如圖:

image.png
  • 通過代碼設置承粤,可以在基類中統(tǒng)一設置,關鍵是判斷是不是rootViewController闯团。下面的方法是判斷是不是導航欄的第一個UIViewController
    // push時自動隱藏TabBar辛臊;不能是第一個;
    if ([self.navigationController.viewControllers indexOfObject:self] != 0) {
        self.hidesBottomBarWhenPushed = YES;
    }

WRNavigationBar

這個第三方庫有2K多的star房交,有時間可以關注一下彻舰,能用就用起來。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末候味,一起剝皮案震驚了整個濱河市刃唤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌白群,老刑警劉巖尚胞,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帜慢,居然都是意外死亡笼裳,警方通過查閱死者的電腦和手機唯卖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躬柬,“玉大人拜轨,你說我怎么就攤上這事≡是啵” “怎么了橄碾?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昧廷。 經(jīng)常有香客問我堪嫂,道長,這世上最難降的妖魔是什么木柬? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任皆串,我火速辦了婚禮,結果婚禮上眉枕,老公的妹妹穿的比我還像新娘恶复。我一直安慰自己,他們只是感情好速挑,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布谤牡。 她就那樣靜靜地躺著,像睡著了一般姥宝。 火紅的嫁衣襯著肌膚如雪翅萤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天腊满,我揣著相機與錄音套么,去河邊找鬼。 笑死碳蛋,一個胖子當著我的面吹牛胚泌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肃弟,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼玷室,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笤受?” 一聲冷哼從身側響起穷缤,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箩兽,沒想到半個月后津肛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡比肄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年快耿,在試婚紗的時候發(fā)現(xiàn)自己被綠了囊陡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡掀亥,死狀恐怖撞反,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搪花,我是刑警寧澤遏片,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站撮竿,受9級特大地震影響吮便,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幢踏,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一髓需、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧房蝉,春花似錦僚匆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檀蹋,卻和暖如春松申,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俯逾。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工贸桶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纱昧。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓刨啸,卻偏偏與公主長得像堡赔,于是被迫代替她去往敵國和親识脆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容