前言
作天遇到一个需求让导航标题设置居中像安卓的一样,本来之前遇到过类似的需求,问题,解决的方法不一样,如果是自定义的导航栏的话,没用系统导航栏那相对很容易控制了,关键现在项目中只不过是把系统的导航栏基础上做了一些UI修改,再重新自定义一个导航栏的话又浪费时间,功能倒不难实现,但总还需要开发调试一番,(其实是比较懒罢了),故想找一种简单省事的办法来,但结果发现并不省事,主要是时间久了,没怎么弄,忘记了,又重温一遍,记录一下。
不设置的是这样的,
起初的样子就是上面的样子,这个情况是为什么呢?仔细查找你就会发现,原来是这样的:
经过测试,系统自带的titleView的起点位置和尺寸依赖于leftBarButtonItem和rightBarButtonItem的位置,即导航栏除了leftBarButtonItem和rightBarButtonItem的位置之外的位置即为titleView的位置。如下:
leftBarButtonItem和rightBarButtonItem都存在的情况。
只有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的任何外观。所以我做了一个偷懒的办法,就不说了,相信一看效果明白了:
对,就是那样,知道就好了!