我们在开发的过程中,系统的控件往往不能满足我们的需求,那么我们一般都会选择自定义控件。但是这样的话就必须实现控件的所有功能,如果我们能在系统控件的基础上改变我们想要的一些效果那就再好不过了。下面我就简单的介绍一下这种方法:
比如说,小编在工作的过程中用到了IUITabBarViewController,但是UI的视觉需要修改tabBar的底部距离与tabBar的顶部的线的颜色。也许你会自定义一个tabBar,实现tabBar的功能,用一个普通的控制器来实现功能,这样做的话就是完全的自定义,可控性强。但是为了改变一点点的东西而大动干戈,会让我们很麻烦,也很不爽。那么大招来—KVC。KVC可以改变系统可读性,即使是系统定义的只读的属性,同样可以修改。下面进入正题:
1.创建一个继承至UITabBar的类MILimitShoppingTabBar,在layoutSubviews中复写我们所需的效果。如何写呢?
首先要找到我们要写的属性。查看tabBar的所有子试图。
打印结果:
可以看到有三个UITabBarButton,这个就是我们点击的三个按钮,UIImageView就是高0.3的顶部的线,49高度的是背景view,这样就好办了直接上代码:
当时UITabBarButton的时候,我们就重新设置它的位置。改变frame的方法你也可以封装一下,是不是简单了很多。
2.OK, 一切就绪,那么我们重写的tabBar如何给UITabBarViewController呢,当你
会报错误:就是这是一个只读的属性,你不能修改,真的不能修改吗?不是的,下面就用到了大招:KVC(对KVC还不了解的同学可以先了解一下)
这样就把我们自定义的tabbar替换了系统UITabBarViewController自身的tabbar;
只是简单的调了几个像素,改变了一个色值,那么你可以举一反三,新浪微博的tabbar,是不是可以用这种方法实现呢?那么不是tabBar的时候呢,是不是也可以呢?答案是肯定的,有兴趣的同学可以尝试一下。有什么不足多多指教。