这篇文章没有代码,但相信看完之后您就会轻松的解决您所遇到的问题。
做iOS开发的朋友们可能会遇到自定义导航栏上的left item,right item和title的情况,这种情况下容易出现一个问题,就是title不居中。
在我解决此问题之前也在网上搜了很多次,但是一直没有遇到比较好的解决办法,因为几乎所有的楼主都是说,拿屏幕宽度减去这个,再减去那个,这种方法简直傻子都能想出来,所以参考意义不大。
本文旨在给大家介绍一个比较通用的解决方法。
首先,说一下title不居中的原因。
其实title不居中的原因很简单,左右item的宽度不相等了呗。由此导致它们挤压了title view的位置,又因为title view的frame不好人为去控制,而文本设置的是居中显示的,由此导致title不居中。
知道了原因,仔细思考一下,解决方式也就一目了然了。既然左右item的宽度不等是造成title不居中援引,那么要想通用、彻底的解决这个问题,自然还得从item的宽度入手。
也许你会问,设计标的left item的宽度是150px,right item是80px,我能怎么办?
其实很好办,关于这个,你要了解的只有一个知识点,那就是父视图的作用。
很多人认为父视图的作用就是作为子视图的target或delegate,来处理子视图的各种事件,这是很常见的。
另外一点很重要但是很容易被忽略的是,它约束了子视图的响应范围,如果其clipsToBounds设置为YES,则其还约束了子视图的显示范围。
看到这里你会不会恍然大悟?
其实如果遇到上面的假设情况,只需将自定义的左右item最底层视图的宽度设置为相等,用其子视图的fram根据设计的frame作为显示,这样就可以轻松解决title不居中的问题了。
也许你会问,这样虽然解决了问题,但是左右item可能出现可见区域不响应事件,这个问题怎么解决?如果作为其他视图,倒是也能解决,通过重写这个自定义控件父类的- (UIView )hitTest:(CGPoint)point withEvent:(UIEvent )event方法,但是在这里,这就是个几乎不能解决的问题,所以在有更好的解决方案之前,只能退而求其次了。
如果您有更好的处理方法,希望能让我有所了解。谢谢