自定義TabBar

| 需要實(shí)現(xiàn)的效果(參考 百思不得姐)
中間的UITabBarButton 沒(méi)有對(duì)應(yīng)的UIViewContrller. 所以需要重新布局.

實(shí)現(xiàn)的效果.png

自定義了一個(gè)RootViewController(YYRootTabBarController 其繼承自UITabBarController )

#import "AppDelegate.h"
#import "YYRootTabBarController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = [[YYRootTabBarController alloc]init];
    [self.window makeKeyAndVisible];
    return YES;
}
...

YYRootTabBarController.h 文件

#import <UIKit/UIKit.h>

@interface YYRootTabBarController : UITabBarController

@end

YYRootTabBarController.m 文件

#import "YYRootTabBarController.h"
#import "YYFirstViewController.h"
#import "YYSecondViewController.h"
#import "YYThirdViewController.h"
#import "YYFourViewController.h"
#import "YYTabBar.h"
@interface YYRootTabBarController ()

@end

@implementation YYRootTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 設(shè)置應(yīng)用程序中所有的UITabBarItem 的屬性
    UITabBarItem *item = [UITabBarItem appearance]; // 認(rèn)為是一個(gè)皮膚
    // 屬性字典
    NSDictionary *normalDic = @{NSFontAttributeName:[UIFont systemFontOfSize:12],
                                 NSForegroundColorAttributeName:[UIColor grayColor]
                                 };
    NSDictionary *selectedDic = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]
                                  };
    
    [item setTitleTextAttributes:normalDic forState:UIControlStateNormal];
    [item setTitleTextAttributes:selectedDic forState:UIControlStateSelected];
    
    YYTabBar *tabBar = [[YYTabBar alloc]init];
    [self setValue:tabBar forKey:@"tabBar"];
  

    //初始化我們的自控制器
    [self setUpChildVC];
    
}

- (void)setUpChildVC{
    // 第一個(gè)
    [self setUpChildViewController:[[YYFirstViewController alloc] init] title:@"首頁(yè)" normalImageName:@"" selectedImageName:@""];
    // 第二個(gè)
    [self setUpChildViewController:[[YYSecondViewController alloc] init] title:@"發(fā)現(xiàn)" normalImageName:@"" selectedImageName:@""];
    // 第三個(gè)
    [self setUpChildViewController:[[YYThirdViewController alloc] init] title:@"搜索" normalImageName:@"" selectedImageName:@""];
    // 第四個(gè)
    [self setUpChildViewController:[[YYFourViewController alloc] init] title:@"我的" normalImageName:@"" selectedImageName:@""];

}

// 添加自控制器 如果需要 UINavigationController 可以在這里添加
- (void)setUpChildViewController:(UIViewController *)vc title:(NSString *)title normalImageName:(NSString *)normalImageName selectedImageName:(NSString *)selectedImageName{
    UINavigationController *NAV = [[UINavigationController alloc]initWithRootViewController:vc
                                   ];
    vc.tabBarItem.title = title;
    vc.tabBarItem.image = [UIImage imageNamed:normalImageName]; // 防止圖片使用系統(tǒng)默認(rèn)顏色 [[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImageName]; // 防止圖片使用系統(tǒng)默認(rèn)顏色 [[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [self addChildViewController:NAV];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}
@end

YYTabBar.h 文件

#import <UIKit/UIKit.h>

@interface YYTabBar : UITabBar

@end

YYTabBar.m 文件

#import "YYTabBar.h"

@interface YYTabBar()
@property (nonatomic, weak) UIButton *plushBtn; // 中間紅的的加號(hào)
@end

@implementation YYTabBar

- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        // 設(shè)置背景圖片
        self.backgroundImage = [UIImage imageNamed:@""];
        // 初始化操作
        UIButton *plushBtn = [[UIButton alloc]init];
        [plushBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
        [plushBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateHighlighted];
        self.plushBtn = plushBtn;
        [self addSubview:plushBtn];
    }
    return self;
}

//布局子空間

- (void)layoutSubviews{
    [super layoutSubviews];
    self.plushBtn.bounds = CGRectMake(0, 0, self.plushBtn.currentBackgroundImage.size.width, self.plushBtn.currentBackgroundImage.size.height); // 以背景圖片的大小設(shè)置按鈕的大小
    self.plushBtn.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5); // 應(yīng)該等價(jià)于 self.plushBtn.center = self.center;
    // 布局UItabBarButton
    int index = 0;
    CGFloat W = self.frame.size.width * 0.2; // 一共 5 個(gè) 評(píng)分, 所有每個(gè)占 0.2
    CGFloat H = self.frame.size.height;
    CGFloat Y = 0;
    for (UIView * view in self.subviews) {
        Class class = NSClassFromString(@"UITabBarButton");
        if ([view isKindOfClass:class]) {
            CGFloat X = W * ((index == 2) ? ++index : index); // 跳過(guò)當(dāng)中的那一個(gè)
            view.frame = CGRectMake(X, Y, W, H);
            index ++;
        }
    }
}
@end

補(bǔ)充: 1.其中圖片的名稱沒(méi)有補(bǔ)全
2.如果有什么問(wèn)題, 可以私信

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孵淘,一起剝皮案震驚了整個(gè)濱河市急膀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昵仅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弄捕,居然都是意外死亡僻孝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門守谓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穿铆,“玉大人,你說(shuō)我怎么就攤上這事分飞°参瘢” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵譬猫,是天一觀的道長(zhǎng)讯檐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)染服,這世上最難降的妖魔是什么别洪? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮柳刮,結(jié)果婚禮上挖垛,老公的妹妹穿的比我還像新娘。我一直安慰自己秉颗,他們只是感情好痢毒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蚕甥,像睡著了一般哪替。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菇怀,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天凭舶,我揣著相機(jī)與錄音,去河邊找鬼爱沟。 笑死帅霜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呼伸。 我是一名探鬼主播身冀,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼括享!你這毒婦竟也來(lái)了闽铐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奶浦,失蹤者是張志新(化名)和其女友劉穎兄墅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澳叉,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隙咸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年沐悦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五督。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藏否,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出充包,到底是詐尸還是另有隱情副签,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布基矮,位于F島的核電站淆储,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏家浇。R本人自食惡果不足惜本砰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钢悲。 院中可真熱鬧点额,春花似錦、人聲如沸莺琳。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惭等。三九已至珍手,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咕缎,已是汗流浹背珠十。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工料扰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凭豪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓晒杈,卻偏偏與公主長(zhǎng)得像嫂伞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拯钻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容