自定义tabBar(仿百思不得姐的tabBar设计)
来源:互联网 发布:网络用语沙发的意思 编辑:程序博客网 时间:2024/05/17 02:43
在制作App的时候我们可能会遇到“不标准的”tabBar。何谓不标准,就是在普通的带有图片和文字的tabBarItem中混进了一个只带有图片的Item,而且图片很大,这样按照常规方法是无法实现的,例如百思不得姐。
上图就有百思不得姐的tabBar,一眼看过去就是4个tabBarItem加上1个button,但是如果我们这样写的话就会产生一个问题,4个tabBarItem均分了整个tabBar的宽度,button插在中间,而且button无法被点击。
但是我们又不能去设置5个tabBarItem去设置,因为这样的话中间的加号按钮就无法占满,会和别的图片一样大小,又没有文字,这样就很不美观,那么怎么办呢?这就要用到自定义,其实iOS的控件我们看起来很多方法都是直接去调用,UI直接去设置,但是有没有想过我们去自定义呢?
方法1:在底部设置View,然后通过button按照样式放好,再通过self.selectedIndex去跳转标签页,这样实现起来没有问题,但是相对起来显得麻烦,因为图片和文字需要调整位置,这个会很蛋疼。所以我推荐方法2。
方法2:重写tabBar,我们自己新建一个tabBar的类,我们其实可以发现,tabBar上面的按钮肯定都是继承与UIView和UIControl类,那么我们可以在layoutSubviews方法中重新设置每个Item的位置,并在中间插入一个button。(一定要在layoutSubviews中实现,如果在init中实现,则系统默认生成的样式会覆盖掉我们自定义的)。
- (void)layoutSubviews{ [super layoutSubviews]; //设置发布按钮的frame self.publishButton.center = CGPointMake(self.width*0.5, self.height*0.5); //设置其他UITabBarButton的frame CGFloat buttonY = 0; CGFloat buttonW = self.width/5.0; CGFloat buttonH = self.height; NSInteger index = 0; for (UIView * button in self.subviews) {// if (![button isKindOfClass:NSClassFromString(@"UITabBarButton")]) continue; if (![button isKindOfClass:[UIControl class]] || button == self.publishButton) continue; //计算按钮的X值 CGFloat buttonX = buttonW * ((index > 1) ? (index + 1) : index); button.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH); //增加索引 index++; }}如此一来我们就可以改变系统设计好的tabBarItem的位置,并在中间插入红色的加号。那么如何去将我们自定义好的这个tabBar放在tabBarController里面呢,一般我们会这么做。
self.tabBar = [[XXXTabBar alloc] init];但是会发现报错,为什么呢?原因在这里:
没错,tabBarController中的tabBar属性是readonly的,那么如何去修改它呢?这就要用到我们强大的KVC,不管在什么地方,不管是不是只读,我都可以去修改掉你。
[self setValue:[[XXXTabBar alloc] init] forKeyPath:@"tabBar"];这样一来,我们就可以将tabBar替换为我们自己自定义的tabBar,效果和图1是一样的,这样是不是方便很多。
- 自定义tabBar(仿百思不得姐的tabBar设计)
- 百思不得姐自定义TabBar
- Android自定义的TabBar
- 隐藏自定义的tabBar
- 自定义tabbar的步骤
- 添加自定义的tabBar
- Tabbar的自定义
- 自定义tabBar的使用
- 自定义Tabbar的badgeView
- 02百思不得姐设置TabBar
- 不得姐实战教程 02 配置tabbar
- 自定义TabBar
- 自定义TabBar
- 自定义Tabbar
- 自定义tabbar
- 自定义tabbar
- 自定义 TabBar
- 自定义TabBar
- 动态规划开始的开始(为什么要用一个数组而不是两个)
- Android基于ksoap2的WebService通信客户端demo
- iOS开发之Xcode的静态分析(Static Code Analysis)与常见问题解决
- 【Android】不弹root请求框检测手机是否root
- 10个随机数
- 自定义tabBar(仿百思不得姐的tabBar设计)
- android scrollview中edittext 软键盘跳出遮住edittext
- 网页分享到微信常见问题
- iOS开发 如何在Label中显示图片-图文混排
- Android7.0新特性
- Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XX
- C与C++的区别
- 鞍点寻找
- SiriKit 编程指南