IOS 自定义tabbar

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

家好,这么晚了,因为我昨天再接过的项目是,发现外包的伙伴们写的Tabbar是系统的,因为我们的产品要求的是44的高度,而系统的Tabbar的高度是49像素,所以怎么办呢,外包的伙伴们做的是在系统的Tabbar的Item上做的视图覆盖,这样我发现有白色的5像素视图会在iPhone5一下的设备并且是IOS7一下的系统上出现,那么怎么办呢,当然做好的办法是不是补补改改,最好的就是从跟上解决,这样我们框架上的其他东西就不会导致一些问题的出现,所以就要自定义Tabbar,

系统给了一个好的方法:切换视图控制器的:

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);

//这个要注意的一点事一定要判断是否finished 做一个BOOL判断,如果没有判断,你要快速的点击切换,会出现白屏,因为你的某一个Controller有refresh或者reload之类的,影响切换的速度,所以一定要做个bool值判断,下来这家看代码吧:

- (void)viewDidLoad

{

    

    [superviewDidLoad];

 

    isTransted YES;

    //主控制器的内容视图

    _contentView = [[UIView allocinitWithFrame:CGRectMake(00self.view.widthself.view.height 44)];

    [self.viewaddSubview:_contentView];

    

    //主控制器的

    _toolView = [[UIView allocinitWithFrame:CGRectMake(0self.view.height 44self.view.width,44)];

    _toolView.backgroundColor = [UIColorredColor];

    _toolView.autoresizingMask UIViewAutoresizingFlexibleTopMargin;

    [self.view addSubview:_toolView];

 

    messages = [[Messagesallocinit];

    Grade *grade  = [[Grade allocinit];

    PhotoTakeCenterVC *tvc = [[PhotoTakeCenterVCalloc]init];

    ListenClassListController *listen = [[ListenClassListControlleralloc]init];

    Setting *setting = [[Setting allocinit];

    

    [selfaddChildViewController:messages];

    [selfaddChildViewController:grade];

    [selfaddChildViewController:tvc];

    [selfaddChildViewController:listen];

    [selfaddChildViewController:setting];

 

    UIViewController *firstController = self.childViewControllers[0];

    _selectedIndex 1;

    firstController.view.top 0;

 

 

 for (NSInteger i = 0; i < count; i ++)

    {

        CGFloat width  = 60;

        CGFloat height = 44;

        CGFloat y = 524 AutoHeight;

        CGFloat x = (width + 1)*i;

        

        if (i == 2)

        {

            width = 76;

            height = 54;

            y -= 10;

        }

        else if (i > 2)

        {

            x += 15;

        }

        

        CGFloat lineY = y;

        

        if (i == 2)

        {

            lineY += 10;

        }

        

        

        UIView *lineView = [[UIView allocinitWithFrame:CGRectMake(x + width, 02, height)];

        lineView.backgroundColor COLOR_WITH_RGB(28.0f30.0f36.0f);

        [_toolView addSubview:lineView];

        [lineView release];

        

        if (iPhone5) {

            y = 568 44;

        }

        else

        {

            y = 480 44;

        }

        

        if (i != 2) {

            BarItem *button = [[BarItem allocinitWithFrame:CGRectMake(x, 0, width, height)];

            NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",i];

            [button setImage:LOADIMAGE(normal, @"png"forState:UIControlStateNormal];

            

            NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",i];

            [button setImage:LOADIMAGE(selected, @"png"forState:UIControlStateSelected];

            button.badgeValue @"0";

            button.tag = i + ITEM_TAG 999;

            [_toolView addSubview:button];

            if (i == 0)

            {

                button.selected YES;

                [[NSNotificationCenterdefaultCenterpostNotificationName:@"UPDATE_ITEM_BADGEVALUE"object:chattype_chat];

            }

            [button release];

            

            [button addTarget:selfaction:@selector(selectControl:) forControlEvents:UIControlEventTouchUpInside];

            self.selectedIndex 1;

            

        }

 

        if(i == 2)

        {

            

            BarItem *button = [[BarItem allocinitWithFrame:CGRectMake(x, -10, width, height)];

            NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",i];

            [button setImage:LOADIMAGE(normal, @"png"forState:UIControlStateNormal];

            

            NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",i];

            [button setImage:LOADIMAGE(selected, @"png"forState:UIControlStateSelected];

            button.badgeValue @"0";

            button.tag = i + ITEM_TAG -999;

            [_toolView addSubview:button];

            [button addTarget:selfaction:@selector(takePhoto) forControlEvents:UIControlEventTouchUpInside];

            [button release];

        }

        

    }

 [_contentView addSubview:firstController.view];

}

 

- (void)selectControl:(BarItem *)sender

{

    if (isTransted == NO) {

        return;

    }

    ;

    if (_selectedIndex != sender.tag)

    {

        isTransted NO;

        UIViewController *toViewController = self.childViewControllers[sender.tag 1];

        toViewController.view.top 0;

        

    

        [selftransitionFromViewController:self.childViewControllers[_selectedIndex 1toViewController:toViewController duration:0options:0animations:^{

            

        } completion:^(BOOL finished) {

            isTransted YES;

        }];

        

        //变换控制器

        _selectedIndex = sender.tag;

    }

   

    for (BarItem *btn in_toolView.subviews)

    {

        if ([btn isKindOfClass:[BarItem class]])

        {

            btn.selected NO;

            NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",btn.tag - 1];

            [btn setImage:LOADIMAGE(normal, @"png"forState:UIControlStateNormal];

        }

    }

    

    

    BarItem *btn1 = (BarItem *)[_toolView viewWithTag:sender.tag];

    NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",sender.tag - 1];

    [btn1 setImage:LOADIMAGE(selected, @"png"forState:UIControlStateNormal];

    btn1.selected YES;

}

 

 

这里的BarItem是一个自定义的button

 

大家尝试吧。其实还有比这更好的,那个是封装的,资源code4App里有。

iOS自定义tabBar iOS自定义tabBar 前段时间我们UI设计师设计了一个与系统自带样式的app的底部tabbar,它除了中间按钮要凸出来,整个tabbar的边部也是不贴边的。要做到这样的效果,就要对系统的babbar进行自定义。UITabBarController中有UITabBar这个类,这个类就是底部导航的关键控件类。 1、创建TextTabBar继承UITabBar #import "TextTabBar.h" #define SCREEN_WIDTH [[UIScreen main 阅读详情

相关推荐

iOS-自定义悬浮TabBar

最近在写一个需求,自定义TabBar自定义TabBar一般有两种方式: ① 创建一个类继承系统的UITabBar,在layoutSubviews方法中重新调整按钮的位置,再通过[self setValue:tabBar forKeyPath:@"tabBar"]方法,利用KVC设置TabBar,但是iOS 13后苹果粑粑不鼓励使用KVC; ② 创建一个继承UIView的类YBTabBar,然...

u010707262的博客 1503

iOS开发之实现TabBar中间凸起“+”按钮(自定义TabBar

参考:http://www.jianshu.com/p/46f61bc7a938,https://github.com/Mringkang/KBCustomCenterTabbar 效果: PS:这里需要用到UIView一个分类的一些属性,参考http://www.cnblogs.com/guitarandcode/p/5758995.html ,图标素材等自行上网找或者自己设计,这里...

weixin_30877181的博客 540

纯代码实现iOS自定义TabBar仿简书风格

自定义TabBar是移动应用中一个常见的用户界面元素,它提供了一种快速切换视图控制器的方式。通常,TabBar位于应用界面的底部,包含几个图标和文字标签,用户点击不同的项可以切换到不同的页面。在iOS应用开发中,TabBarController是管理这些Tab项的核心控制器。在iOS应用开发中,使用纯代码实现自定义TabBar与使用Storyboard相比,最大的优势之一在于灵活性和对应用程序行为的控制力。使用纯代码,开发者可以精细地控制每一个细节,从而实现更复杂的动画效果和交互逻辑。

weixin_34413326的博客 1402

iOS开发简记(2):自定义tabbar

tabbar是放在APP底部的控件。常见的APP都使用tabbar来进行功能分类的管理,比如微信、QQ等等。 小程需要一个特殊一点的tabbar,要求突显中间的那个按钮,让中间按钮特别显眼,从而引导用户去点击。 所以,让中间按钮大于两边的按钮,是一个基本的要求。 使用常规的UITabBar跟UITabBarController不能满足这个需求,于是,扩展它,自定一下,是一个办法。 需要自定义uitabbar跟uitabbarcontroller。uitabbar是一个uiview,最终由uitab...

ElegantHedgehog的博客 1119

iOS开发之模仿简书App自定义TabBar详解

iOS自定义TabBar

首字母大写-博客 1万+

iOS 开发 自定义Tabbar

自定义tabbar怎么做,,后来感觉有必要写出来分享一下, 首先创建一个file继承 UITabBarController   在.m文件中添加下面代码  ,,其中FirstViewController    SecondViewController    ThirdViewController  为tabbar里切换的三个页面,     NSMutableArray *

yyc123yyc456yyc的博客 548

iOS Swift 自定义tabbar

iOS中 我们首先创建出4个视图控制器,跟一个主视图控制器 MainViewController .h

quanhaoH的专栏 2798

ios tabbar插件_iOS自定义TabBar

iOS自定义TabBar一般有两种方式:创建一个类继承字UITabBar,在layoutSubviews方法中重新调整按钮的位置,再通过[self setValue:tabBar forKeyPath:@"tabBar"]方法,利用KVC设置TabBar,但是iOS 13后苹果粑粑不鼓励使用KVC。这篇文章主要讲第二种方法:创建一个继承UIView的类WSTabBar,然后把系统UITabBar上...

weixin_39720662的博客 389

ios tabbar插件_iOS自定义tabBar

iOS原生的tabBar中,能够实现按钮的点击事件,能够实现视图控制器的切换等,但是在实际工程中,对于tabBar的要求的功能往往是系统自己实现不了的,所以我们这里就需要用到自定义tabBar了。对于tabBar上展示视图控制器,我们会采用的是在把几个视图控制直接加载到tabBarController上去。这里新建三个视图控制器,由于在一、系统样式ViewController会有其他代码,所以...

weixin_39941721的博客 571

iOS开发-实现自定义Tabbartabbar按钮动画效果

INSysTabbar继承UIView,实现tabbarButton效果//代理 @property(nonatomic , strong) UIImage * bgroundImage;//背景图 @property(nonatomic , strong) INSysTabbarShapeView * tabbarBGShapeView;//背景图 @property(nonatomic , strong) UIColor * lineColor;

一名开发者 3189

ios自定义tabbar跳转隐藏问题

自定义tabbar高度的跳转隐藏问题 在ios开发(http://www.maiziedu.com/course/ios/)中,如何自定义tabbar高度的跳转隐藏问题,比如和系统自带的tabbar高度不一样导致的有一条线的问题,还有push时动画效果等等一些列问题不在这里累述了,当然,思路有很多,可以参考以上链接自己琢磨琢磨,好了,下面直接上个人认为完美解决办法。 需求 1、自定义tabb

qq_32506555的博客 2626

iOS之高度自定义TabBar的优雅实现

iOS之高度自定义TabBar的优雅实现需求的由来传统的实现更巧妙的实现总结遇见的问题记录 需求的由来 日常开发里,有时候产品经理会走过来丢给你一个无厘头的需求,App的底部TabBar 需要支持后台配置数量和动态替换位置,还可以支持显示gif,还可以支持凸起效果,我的天,提我的40米大刀来,产品你先跑39米。对于这样的开发需求,有时候是很崩溃的,因为涉及到的业务代码改动可能就很大了。 传统的实现...

TalonSop的博客 2580

iOS 自定义TabBar(仿新浪微博TabBar)

UITabBar 是一个比较常用的工具 有的时候系统的样式不能满足需求,我们可以考虑自定义 中间的+ 就属于自定义样式 我们可以通过自定义TabBar来实现 首先新建一个项目 创建一个类继承字UITabBar 创建一个协议和按钮 #import @class MYTabBar; @protocol MYTabBarDelegate

7519

iOS 自定义tabbar 关于push问题 小技巧

自定义tabbar 在push的时候 该如何隐藏tab bar呢,在这里分享一下我的解决办法

于丹丹 no zuo no die no life 7585

ios tabbar插件_iOS-快速自定义UITabBarController内的tabbar控件

我们都知道在IOS7之前,Xcode中自带的UITabBarController控制器的tabbar样子很难看,可有时又想利用UITabBarController来快速切换界面,这样就牵扯到要自定义其中的tabbar。那么,如何才能自定义一个tabbar,拥有与QQ或者新浪微博那样好看的界面呢?如上图中,我们的目标是自定义tabbar做成图中下方的样子,这样点击下方,以快速切换界面。思路:1.定义...

weixin_39572316的博客 367

iOS 底部按钮 工具栏 TabbarTabbar自定义(中间突出)

大多数应用使用系统自带的Tabbar就能够满足需求 通常情况都是在AppDelegate.m里创建一个UITabBarController将其它的控制器用UINavigationController包装一层,再添加到UITabBarController的viewControllers里。再将UITabBarController设置为self.window的rootViewController。 ...

weixin_39339407的博客 3182

ios 动画 隐藏tabbar_iOS_自定义转场TabBar的隐藏动画

摘要实现同iOS 11 App Store Today相似的转场效果.本文尝试解决转场(Transition)过程中TabBar的隐藏(向下滑出屏幕).tabbar_ani_slow.gif遇到的问题项目中使用的是系统自带的Storyboard上的TabBar,TabBar的隐藏使用的是hidesBottomBarWhenPushed方法.实现自定义转场的过程中,TabBar会跟随转场动画向左移出...

weixin_39782573的博客 330

iOS自定义tabBar思路

tabBar爱怎么自定义就怎么自定义,想怎么设计就怎么设计! 1、创建一个tabBar,UIView也行,UIImageView也可以,只要是视图即可。 将创建的tabBar视图添加在tabBarController的self.view上,并放置适当位置。 2、隐藏系统tabBar self.tabBar.hidden = YES; 为了避免系统的tabBar上的按钮点击事件和我...

竹毛言己 1269

iOS】【实例】自定义一个简单的TabBar

设置模块的时候,我们往往在UITabBarController下添加UINavigationController、UIViewController,其中UINavigationController又按栈排列UIViewController,举栗如图: 原图来源于网络,侵删。 UITabBarController的子视图是平级的,想点那个点那个,妈妈再也不用担心我的%#@¥。

IT小透明 1620
上一篇: IOS 自定义导航栏和标签栏
下一篇: IOS 出现linker command failed with exit code 1解决办法
love_Coders
博客等级 码龄11年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值