前言
作天遇到一個需求讓導航標題設置居中像安卓的一樣,本來之前遇到過類似的需求,問題,解決的方法不一樣,如果是自定義的導航欄的話,沒用系統導航欄那相對很容易控制了,關鍵現在項目中只不過是把系統的導航欄基礎上做了一些UI修改,再重新自定義一個導航欄的話又浪費時間,功能倒不難實現,但總還需要開發調試一番,(其實是比較懶罷了),故想找一種簡單省事的辦法來,但結果發現并不省事,主要是時間久了,沒怎么弄,忘記了,又重溫一遍,記錄一下。
不設置的是這樣的,
IMG_A9EBED932D4D-1.jpeg
起初的樣子就是上面的樣子,這個情況是為什么呢?仔細查找你就會發現,原來是這樣的:
屏幕快照 2018-01-09 下午2.26.34.png
經過測試,系統自帶的titleView的起點位置和尺寸依賴于leftBarButtonItem和rightBarButtonItem的位置,即導航欄除了leftBarButtonItem和rightBarButtonItem的位置之外的位置即為titleView的位置。如下:
IMG_EBC921774E4B-1.jpeg
leftBarButtonItem和rightBarButtonItem都存在的情況。
IMG_AB0A11ACD479-1.jpeg
只有leftBarButtonItem存在的情況。
這樣可以看出BarButtonItem和titleView的關系了吧!
可能你會這樣更改:
CGRect leftViewbounds = self.navigationItem.leftBarButtonItem.customView.bounds;
CGRect rightViewbounds = self.navigationItem.rightBarButtonItem.customView.bounds;
self.navigationItem.titleView.frame = CGRectMake(0, 0, IDBScreenW-150, self.navigationItem.titleView.height);
self.navigationItem.titleView = titleLb;
self.navigationItem.titleView.frame = CGRectMake(0, 0, IDBScreenW-150, self.navigationItem.titleView.height);
self.navigationItem.titleView.width = IDBScreenW-leftViewbounds.size.width*2;
但是我告訴你,這樣設置都是無效的,依然改變不了titleView的任何外觀。所以我做了一個偷懶的辦法,就不說了,相信一看效果明白了:
IMG_A430881E67B0-1.jpeg
對,就是那樣,知道就好了!