iOS_25_彩票骨架搭建+导航栏适配

Posted wzjhoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS_25_彩票骨架搭建+导航栏适配相关的知识,希望对你有一定的参考价值。

终于效果图:

技术分享








技术分享



Main.storyboard

技术分享


初始化的控制器是:导航控制器

它的根控制器是:TabBarController

TabBarController的底部是一个自己定义的TabBar

里面加入了5个TabBarItem

点击每个item,

tabBar上的相应item的子控制器的navigationItem的值,

转移(赋值,复制)给TabBarController的navigationItem,

从而显示在导航栏上,

由于TabBarController就是导航控制器的根控制器,也同一时候就是栈顶控制器,导航控制器仅仅知道它的存在


//
//  BeyondTabBarController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondTabBarController.h"
#import "BeyondTabBar.h"
#import "BeyondTabBarItem.h"
#import "BeyondTabBarDelegate.h"
@interface BeyondTabBarController ()<BeyondTabBarDelegate>

@end

@implementation BeyondTabBarController


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 1.釜底抽薪  直接删除默认的tabBar
        [self.tabBar removeFromSuperview];
        
        // 2.创建tabbar
        BeyondTabBar *myTabBar = [[BeyondTabBar alloc] init];
        // 占位原来的tabBar
        myTabBar.frame = self.tabBar.frame;
        // 代理设置后,能够接收tabBar内部button的点击状态切换
        myTabBar.delegate = self;
        // 加入到当前控制器的view
        [self.view addSubview:myTabBar];
        
        // 3.由于 图片名的规律性,一次性加入5个tabBarItembutton
        for (int i = 1; i<=5; i++) {
            NSString *normal = [NSString stringWithFormat:@"TabBar%d", i];
            NSString *selected = [normal stringByAppendingString:@"Sel"];
            // 调用tabBar开放出来的接口,向tabBar内部加入button,仅仅要传參:图片名
            [myTabBar addOneTabBarItem:normal selectedIconName:selected];
        }
    });
}

#pragma mark - tabbar代理方法
- (void)tabBar:(BeyondTabBarItem *)tabBar didSelectButtonFrom:(NSUInteger)from to:(NSUInteger)to
{
    // 1.直接通过索引  选中某个控制器(这个是UITabBarController自带的API)
    self.selectedIndex = to;
    
    UITableViewController *newVC = self.childViewControllers[to];
    // 2.将tabBar上的相应button的子控制器的navigationItem值转移给TabBarController,由于导航控制器的根控制器就是TabBarController,导航控制器 仅仅知道它的存在
    [self.navigationItem copyFromItem:newVC.navigationItem];
}@end



导航栏的适配

仅仅需提供64高和44高的背景图片就可以

//
//  BeyondNavigationController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondNavigationController.h"

@interface BeyondNavigationController ()

@end

@implementation BeyondNavigationController

#pragma mark 一个类仅仅会调用一次
+ (void)initialize
{
    // 1.取出设置主题的对象
    UINavigationBar *navBar = [UINavigationBar appearance];
    UIBarButtonItem *barItem = [UIBarButtonItem appearance];
    
    // 2.设置导航栏的背景图片
    NSString *navBarBg = nil;
    // 推断ios7
    // [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0
    if (iOS7) {
        // 使用64高度的图片,做导航栏背景图片
        navBarBg = @"NavBar64";
        // 设置导航栏的渐变色为白色(iOS7中返回箭头的颜色变为这个颜色:白色)
        navBar.tintColor = [UIColor whiteColor];
    } else {
        // 非iOS7,使用44高度的图片
        navBarBg = @"NavBar";
        // 黑色的顶部状态条
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
        // 设置导航栏button的背景图片
        [barItem setBgImgForNormal:@"NavButton" highlighted:@"NavButtonPressed"];
        
        // 设置导航栏返回button的背景图片
        [barItem setBackBtnBgImgForNormal:@"NavBackButton" highlighted:@"NavBackButtonPressed"];
    }
    
    [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault];
    
    // 3.设置导航栏标题颜色为白色
    [navBar setTitleTextAttributes:@{
                                     NSForegroundColorAttributeName : [UIColor whiteColor]
                                     }];
    
    // 4.设置导航栏button文字颜色为白色
    [barItem setTitleTextAttributes:@{
                                      NSForegroundColorAttributeName : [UIColor whiteColor],
                                      NSFontAttributeName : [UIFont systemFontOfSize:13]
                                      } forState:UIControlStateNormal];
}


#pragma mark 控制状态栏的样式
/*
 状态栏的管理:
 1> iOS7之前:UIApplication
 2> iOS7開始:交给相应的控制器去管理
 */
- (UIStatusBarStyle)preferredStatusBarStyle
{
    // 白色样式
    return UIStatusBarStyleLightContent;
}

@end







































以上是关于iOS_25_彩票骨架搭建+导航栏适配的主要内容,如果未能解决你的问题,请参考以下文章

iOS小技能:去掉/新增导航栏黑边(iOS13适配)

iOS小技能:去掉/新增导航栏黑边(iOS13适配)

iOS 15 适配导航栏

iOS 15 适配导航栏

iOS 15 适配导航栏

iOS开发 - iOS15导航栏适配(Object-C、Swift)