uitabbar_uitabbarcontroller - CSDN
  • 1.自定义中间带弧度的UITabBar(参照代码思路可改成其它形状)。 2.TabBar保留系统原有push和pop过渡效果。 3.由于自定义了UITabBar所以就连同TabBarController也一同定义了(用法和系统的很类似)。
  • 前言: 公司的项目需要定制一个中间突出的TabBar,在github 上找到一份可以参考的代码(虽然是四年前的,但是还是很有参考价值)。...作者的readme文档写的很好,这里给出翻译(很不错的思路哦) ...

    前言:

    公司的项目需要定制一个中间突出的TabBar,在github 上找到一份可以参考的代码(虽然是四年前的,但是还是很有参考价值)。 网址:https://github.com/boctor/idev-recipes/tree/master/RaisedCenterTabBar。作者的readme文档写的很好,这里给出翻译(很不错的思路哦)

     

    先看看效果:

    \\

    思路:

     

    ## Problem:

    问题:

     

    Apps like [Instagram][], [DailyBooth][] and [Path™][] have what

    looks like a standard UITabBarController, but the center tab bar is

    raised or colored. How do we recreate this look?

     

    像[Instagram][], [DailyBooth][] and [Path™][] 这些app有一个看起来像标准 tabBarController,但是呢,tabBar的中间是凸起的或者着色的。我们怎样做可以构建这种现实效果呢?


     

    ## Solution:

    解决方案:

     

    These tab bars look pretty standard with the exception of the

    center item, so we’ll start out with a standard UITabBarController

    which contains a UITabBar.

     

    这些标签栏除了中间项以外看起来都相当的标准,所以我们会从一个标准的包含一个tabBar的UITabBarController开始。

     

    Looking at [the images][] inside each app, it is quickly apparent

    that the middle tab bar is simply a custom UIButton.

     

    查看每个应用内的图片,显而易见的是中间的标签是一个简单的自定义button。

     

     

    A UITabBar contains an array of UITabBarItems, which inherit from

    UIBarItem. But unlike UIBarButtonItem that also inherits from

    UIBarItem, there is no API to create a UITabBarItem with a

    customView.

     

    一个UITabBar 包含了一个UITabBaritems的数组,UITabBaritem继承自UIBarItem。但是和同样继承自UIBarItem的UIBarButtonItem不同,苹果官方没有提供给UITabBarItem创建自定义视图的api.

     

    So instead of trying to create a custom UITabBarItem, we’ll just

    create a regular one and then put the custom UIButton on top of the

    UITabBar.

     

    所以呢,大家不用去尝试创建一个自定义的UITabBarItem,我们只需要创建一个标准的UITabBar,然后把自定义的button放在UITabBar上面就可以了。

     

     

    Our basic recipe is then to create a subclass of UITabBarController

    and add a custom UIButton on top of the UITabBar.

     

    我们的基本方案是子类化UITabBarController然后添加一个自定义的button再UITabBar上面。

     

    If the button is the same height as the UITabBar, then we set the

    center of the button to the center of the UITabBar. If the button

    is slightly higher, then we do the the same thing except we adjust

    the center’s y value to account for the difference in height.

     

    如果button和UITabBar一样高呢,我们就包button的center和UITabBar的center对齐。如果button稍微高那么一点呢,我们做同样的事情,然后设定center的Y值,以对应高度的差。本文原创,


     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0.0,0.0, buttonImage.size.width, buttonImage.size.height);
        [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
        [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted];
         
        CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
        if(heightDifference < 0)
          button.center = self.tabBar.center;
        else
        {
          CGPoint center = self.tabBar.center;
          center.y = center.y - heightDifference/2.0;
          button.center = center;
        }
         
        [self.view addSubview:button];


     

    代码实现

    这里我借鉴了上文作者的代码,针对我的需要进行了封装,下面放代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    //
    //  TabBarViewController.m
    //  tabBarViewController
    //
    //  Created by Bc_Ltf on 15/3/25.
    //  Copyright (c) 2015年 Bc_ltf. All rights reserved.
    //
     
    #importTabBarViewController.h
     
    @interfaceTabBarViewController ()<uitabbarcontrollerdelegate>
     
    @end
     
    @implementationTabBarViewController
    @synthesizebutton;
    @synthesizemyTabBar;
     
    - (void)viewDidLoad {
        [superviewDidLoad];
        [self setup];
     
     
    }
     
    - (void)didReceiveMemoryWarning {
        [superdidReceiveMemoryWarning];
    }
     
    #pragma mark- setup
    -(void)setup
    {
        //  添加突出按钮
        [self addCenterButtonWithImage:[UIImage imageNamed:@main] selectedImage:[UIImage imageNamed:@mainH]];
        //  UITabBarControllerDelegate 指定为自己
        self.delegate=self;
        //  指定当前页——中间页
        self.selectedIndex=2;
        //  设点button状态
        button.selected=YES;
        //  设定其他item点击选中颜色
        myTabBar.tintColor= [UIColor colorWithRed:222/255.0green:78/255.0blue:22/255.0alpha:1];
    }
     
     
    #pragma mark - addCenterButton
    // Create a custom UIButton and add it to the center of our tab bar
    -(void) addCenterButtonWithImage:(UIImage*)buttonImage selectedImage:(UIImage*)selectedImage
    {
        button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button addTarget:self action:@selector(pressChange:) forControlEvents:UIControlEventTouchUpInside];
        button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
         
        //  设定button大小为适应图片
        button.frame = CGRectMake(0.0,0.0, buttonImage.size.width, buttonImage.size.height);
        [button setImage:buttonImage forState:UIControlStateNormal];
        [button setImage:selectedImage forState:UIControlStateSelected];
         
        //  这个比较恶心  去掉选中button时候的阴影
        button.adjustsImageWhenHighlighted=NO;
         
         
        /*
         *  核心代码:设置button的center 和 tabBar的 center 做对齐操作, 同时做出相对的上浮
         */
        CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
        if(heightDifference < 0)
            button.center = self.tabBar.center;
        else
        {
            CGPoint center = self.tabBar.center;
            center.y = center.y - heightDifference/2.0;
            button.center = center;
        }
         
        [self.view addSubview:button];
    }
     
    -(void)pressChange:(id)sender
    {
        self.selectedIndex=2;
        button.selected=YES;
    }
     
    #pragma mark- TabBar Delegate
     
    //  换页和button的状态关联上
     
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
    {
        if(self.selectedIndex==2) {
            button.selected=YES;
        }else
        {
            button.selected=NO;
        }
    }
     
    @end
    </uitabbarcontrollerdelegate>
    展开全文
  • 基类二:UITabBar

    2019-06-13 14:05:00
    UITabBar对象控制在不同的任务、视图或模式之间切换。 包含于UITabBarController中,是一个可以管理一系列自定义视图显示的程序对象。 继承关系:UITabBar--->UIView-->UIResponder-->NSObject 二、属性...

    一、简述

    UITabBar对象控制在不同的任务、视图或模式之间切换。

    包含于UITabBarController中,是一个可以管理一系列自定义视图显示的程序对象。

    继承关系:UITabBar--->UIView-->UIResponder-->NSObject

    二、属性

    UITabBarItem的位置

    typedef NS_ENUM(NSInteger, UITabBarItemPositioning) {
        UITabBarItemPositioningAutomatic,
        UITabBarItemPositioningFill,
        UITabBarItemPositioningCentered,
    } NS_ENUM_AVAILABLE_IOS(7_0);

    tabBar代理

    @property(nullable, nonatomic, weak) id<UITabBarDelegate> delegate;    

    tabBarItem 

    @property(nullable, nonatomic, copy) NSArray<UITabBarItem *> *items; 

    选中的tabBarItem

    @property(nullable, nonatomic, weak) UITabBarItem *selectedItem;

    iOS7.0以上的tabBar的tintColor已更改,它不再影响tabBar的背景,若要为tabBar的背景着色,请使用barTabBar

    @property(null_resettable, nonatomic, strong) UIColor *tintColor NS_AVAILABLE_IOS(5_0);
    @property(nullable, nonatomic, strong) UIColor *barTintColor NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR; 

    未选中的tabBarItemColor

    @property (nonatomic, readwrite, copy, nullable) UIColor *unselectedItemTintColor NS_AVAILABLE_IOS(10_0) UI_APPEARANCE_SELECTOR;

    选中的tabBarItemColor

    @property(nullable, nonatomic, strong) UIColor *selectedImageTintColor NS_DEPRECATED_IOS(5_0,8_0,"Use tintColor") UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;

    tabBar背景图片,会充满整个tabBar

    @property(nullable, nonatomic, strong) UIImage *backgroundImage NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

    图像在tabBar的顶部,tabBarItem的后边

    @property(nullable, nonatomic, strong) UIImage *selectionIndicatorImage NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

    默认值为零。非零时,显示自定义阴影图像而不是默认阴影图像。

    要显示自定义阴影,自定义背景图像还必须设置-backundgroundimage:

    如果使用默认背景图像,则将使用默认阴影图像。

    @property(nullable, nonatomic, strong) UIImage *shadowImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

    tabBarItem填充位置,默认水平填充,呼应第一个枚举。

    @property(nonatomic) UITabBarItemPositioning itemPositioning NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;

    >0  自定义tabBarItem的宽度,<=0 系统自定义的宽度

    @property(nonatomic) CGFloat itemWidth NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

    >0  自定义tabBarItem之间的间距   <= 系统自定义

    @property(nonatomic) CGFloat itemSpacing NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

    tabBar样式,默认黑色

    @property(nonatomic) UIBarStyle barStyle NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;

    tabBar透明度,默认yes

    @property(nonatomic,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(7_0);

     

    三、delegate方法

    //在tabBarItems显示之前调用
    - (void)tabBar:(UITabBar *)tabBar willBeginCustomizingItems:(NSArray<UITabBarItem *> *)items __TVOS_PROHIBITED;   
    //在tabBarItem显示之后调用         
    - (void)tabBar:(UITabBar *)tabBar didBeginCustomizingItems:(NSArray<UITabBarItem *> *)items __TVOS_PROHIBITED;    
    //在tabBarItem隐藏之前调用    
    - (void)tabBar:(UITabBar *)tabBar willEndCustomizingItems:(NSArray<UITabBarItem *> *)items changed:(BOOL)changed __TVOS_PROHIBITED; 
    //在tabBarItem隐藏之后调用
    - (void)tabBar:(UITabBar *)tabBar didEndCustomizingItems:(NSArray<UITabBarItem *> *)items changed:(BOOL)changed __TVOS_PROHIBITED; 

     

     

    展开全文
  • ---->>>>UITabBar UITabBar 实际上就是代表一个标签条 它是UITabBarItem的容器 每个UITabBarItem代表一个标签项 UITabBar提供了如下的属性和方法来访问他所包含的标签项 ->>>items : 通过这个属性设置tabbar所...

           ---->>>>UITabBar<<<------

    UITabBar 实际上就是代表一个标签条 它是UITabBarItem的容器 每个UITabBarItem代表一个标签项

    UITabBar提供了如下的属性和方法来访问他所包含的标签项

    ->>>items : 通过这个属性设置tabbar所包含的多个tabbaritem的对象

    ->>>selectedItem: 该属性用于返回该UITabbar当前被选中的标签项。

    ->>>setItems:animation:该属性用来设置UITabBar 包含的多个Item 对象


    创建UITabbar 步骤

    1.首先需要创建一个UITabBar对象

    2.创建多个UITabBarItem对象 并且将这些UITabBarItem 设置给Tabbar中

    3.实现UITabBar协议 Delegate 用于监听用户的选中事件。


      //创建uitabbar
        UITabBar *tabbar = [[UITabBar alloc]initWithFrame:CGRectMake(0,self.view.frame.size.height-44, self.view.frame.size.width, 44)];
        tabbar.delegate =self;
        //把tabbar添加到标签中
        [self.view addSubview:tabbar];
        
        //使用系统图标创建标签项 标签项就是所谓的uitabbaritem
        UITabBarItem *tabItem1 = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemHistory tag:0];
        UITabBarItem *tabItem2 = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:1];
        UITabBarItem *tabItem3 =[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2];
        
        //建立一个数组 把创建的标签放入到数组中 也就是放到tabbar中
        tabbar.items =[NSArray arrayWithObjects:tabItem1,tabItem2,tabItem3, nil];
        //系统默认选中会边颜色

    //由uitabbardelegate 定义的协议方法实现 当选中某个item的时候会被调用
    - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
    {
        NSString *msg = [NSString stringWithFormat:@"您选中的是第%ld项",(long)item.tag];
        
        //创建一个alertview的提示窗口
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];



    展开全文
  • UITabBar

    2020-05-03 20:09:23
    如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件 数组的形式存放子控制器 UITabBarButton UITabBarButton里面显示什么内容,由对应控制器的tabBarItem属性决定 UITabBar...
    • 如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件
    • 数组的形式存放子控制器

    UITabBarButton

    • UITabBarButton里面显示什么内容,由对应控制器的tabBarItem属性决定
    • UITabBarItem有以下属性影响着UITabBarButton的内容
    • 标题文字
    @property(nonatomic , copy) NSString *title;
    
    • 图标
    @property(nonatomic , retain) UIImage *image;
    
    • 选中时的图标
    @property(nonatomic , retain) UIImage *selectedImage;
    
    • 提醒数字
    @property(nonatomic , copy) NSString *badgeValue;
    
    //当前选中的哪个控制器就在哪个控制器上设置(选中nav控制器)
    nav.tabBarItem.title = @"消息";
    nav.tabBarItem.badgeValue = @"10";
    nav.tabBarItem.image = [UIImage imageNamed:@"<图片名字>"];
    
    • 在当modal时,会把窗口上的View给移除,然后要modal控制器的view,给添加到窗口上
    • 如果当一个控制器被销毁,那么他的View的业务逻辑是没有办法处理
    • 控制器被销毁,控制器的View不一定被销毁(只要有强指针指向它,就不会被销毁)
    • 在modal的时候,之前的控制器不是被销毁了,他还是有一个强指针引用着的(presentedViewController属性引用着)
    展开全文
  • 系统的UITabBar的背景颜色随着深夜模式变成了黑色。因此我想让其保持白色。 网上找了好几种方法: 1 、 [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabBarBackgroundImage"]]; [UITabBar...
  • 大家都知道在UITabBarController的底部有一个tabbar,也就是UITabbar对象,用户控制器之间快速切换。 UINavigationController控制器的底部有一个toolbar(默认是隐藏的,可用通过[self.navigationController ...
  • UITabBar UITabBarItem 自定义

    千次阅读 2018-05-03 09:50:31
    UITabBar 自定义详细解读 不得不说UITabBar神一般的存在 使用过UITabbar的人都知道, 很多App开发都挺喜欢用UITabbar,系统的UITabbar的确很方便,省事,强大的iOS 的api给开发带来很多便利,我们看看企鹅开发的...
  • 前阵子项目需求,希望当用户存在未读消息的时候在对应的UITabBarItem上显示小红点。可是,突然发现IOS自带的UITabBarItem的badgeValue尺寸偏大,不满足项目需求。于是乎,就萌生了一下如何在UITabBarItem上自定义...
  • 前言:首先了解UINavigationBar、UITabBar层级结构 1、UITabBar从1-7的排序依次是: UIWindow (红色部分) UILayoutContainerView UITransitionView UITabBar _UIBarBackground UIImageView ...
  • 标签栏(UITabBar)在项目开发中经常会用到,它里面的每一个标签项(UITabBarItem)都可以设置不同的图片和标题文字。过去不管我们使用 iPad 还是 iPhone 运行程序,图片和文字都是垂直排列的(图标在上,文字在下)...
  • 修改UITabBar高度

    2020-05-22 09:55:20
    文章目录背景修改系统默认UITabBar高度1. 自己实现一个TabBar视图2. 复写-sizeThatFits()方法 背景 iOS系统框架UIKit提供了可供使用的tab视图UITabBar,使用起来很方便,但是它是有一个默认高度的,在外部是不能随便...
  • 下面是标签栏(UITabBar)中tab按钮图标分别在1x、2x、3x下不会压缩变形的尺寸: @1x : 推荐 25 x 25 (最大: 48 x 32) @2x : 推荐 50 x 50 (最大: 96 x 64) @3x : 推荐 75 x 75 (最大: 144 x 96)   下面是在2x...
  • 一、介绍 ... ...然而,这个是可以优化的,附带点特效能极大为app增色。 例如音效和波动,淘宝和今日头条就是这么实现的,效果特别棒。这里实现一下UITabbarItem波动的动画。...1、遍历标签栏控制器的UITabbarItem,给其...
  • IOS UITabBar 隐藏分割线

    千次阅读 2017-12-18 16:03:57
    最新在仿照网易云做性皮肤, 希望做成的效果如下: 顶部...在 https://stackoverflow.com/questions/14371343/ios-uitabbar-remove-top-shadow-gradient-line 和国内的一些论坛上搜索,基本就是下方的答案.[[UITabBar appe
  • 修改UITabBarItem的字体颜色

    千次阅读 2015-01-08 18:38:11
    修改UITabBarItem下面字体的颜色,如图: [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor, nil] forState:UI...
  • UITabBar的item的Image的大小是:30*30的,为了图片的质量UI提供的图片为60*60或者其他大于30*30的尺寸,如果直接使用会因为图片大导致模糊,自己调整尺寸也会造成模糊的情况。 解决办法: 使用原来尺寸的图片,...
  • 开发中,经常会遇到各种各样的奇葩设计要求,因为apple提供的UITabBar样式单一,只是简单的"图片+文字"样式,高度49又不可以改变。自定义UITabBar成为了唯一的出路。下面我就列举开发中我经常用到的两种自定义...
  • UITabBar在显示和隐藏的过程中层级是变化的 。在推出控制器隐藏tabBar的时候,tabBar 是从UITabBarController的view上先移除然后加在一个临时创建的view上,然后实现从又到左的抽屉动画,动画结束并且延时几百毫秒后...
  • 实现了自定义的`UITabBar`,但是在它的顶部有一条阴影,我加了这条语句: [self.tabBar setBackgroundImage:[UIImage imageNamed:@"navBarBottom.png"]]; 用来修改背景,但是那条阴影线还是去不掉,不知道应该...
1 2 3 4 5 ... 20
收藏数 5,936
精华内容 2,374
关键字:

uitabbar