tabBar,navigationBar,statuBar

隐藏导航栏页面与没有隐藏导航栏页面切换,会出现导航栏动画与页面动画不同步的现象

使用navigationController?.setNavigationBarHidden(__, animated: __)方法可以解决

一:A无,B有

A:

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        navigationController?.setNavigationBarHidden(true, animated: animated)

    }

override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        navigationController?.setNavigationBarHidden(false, animated: animated)

    }

B:

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        navigationController?.setNavigationBarHidden(false, animated: animated)

    }

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        navigationController?.setNavigationBarHidden(true, animated: animated)

    }

二:A无,B无

A:同上A

B:

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

         navigationController?.setNavigationBarHidden(true, animated: false)

    }

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        navigationController?.setNavigationBarHidden(true, animated: animated)

    }

三、A有,B无

A:同一B

B:同上B

C有:C:

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

         navigationController?.setNavigationBarHidden(true, animated: animated)

    }

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        navigationController?.setNavigationBarHidden(true, animated: animated)

    }

四、A有,B有

A:同一B

B:同一B

-----------------------------------------------------------------------------------------------------------------------------

 

继承自UINavigationController和UITabBarController的类的init函数会产生loadView、viewDidLoad函数在初始化[super init]函数调用后就执行,一般UIViewController没有这个问题

如果是作为rootViewController,可以把本原在viewDidLoad()中加载的内容,放到viewWillAppear

-----------------------------------------------------------------------------------------------------------------------------

UITabBar.appearance().isTranslucent = false//ios12.1,适配刘海后出现返回到有tabbar的页面tabbar的图标左上移到正确位置。

-----------------------------------------------------------------------------------------------------------------------------

tabbar切换几下后tabbar消失:把每个item对应的viewController

  override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        navigationController?.navigationBar.isHidden = false

//        self.tabBarController?.tabBar.isHidden = true//设置后,tabbar切换时会出现消失的情况

-----------------------------------------------------------------------------------------------------------------------------

self.navigationController!.navigationBar.isTranslucent = false

这个值如果不设置为false,ios12以下系统,不能自动布局,且在viewDidLayoutSubviews。与viewDidAppear 中修改fram有用,viewDidLoad,viewSafeAreaInsetsDidChange,viewLayoutMarginsDidChange与viewWillAppear中修改无效,其他方法未测试,修改后会呈现半透明navigationBar

 

  self.navigationBar.barTintColor = [UIColor blackColor];//改了,这个值影响整个bar的颜色,还会影响到statuBar的颜色

 self.navigationBar.tintColor = [UIColor whiteColor]; //改了,这个值影响Item的颜色(图片与文字等)

 

隐藏tabBar或者导航栏不成功,可能xib中没有勾选 Under top Bars Under Bottom Bars

 

present 的View修改statubar

1)打开项目的plist文件,设置View controller-based status bar appearance" 为 NO

2文件中的启动方法中设置UIApplication.shared.statusBarStyle = .lightContent

 

 

  1. // 设置导航条的色调 理解为"混合色"  
  2. self.navigationController.navigationBar.barTintColor = [UIColor blackColor];  
  3. // 导航栏默认是半透明状态  
  4. self.navigationController.navigationBar.backgroundColor = [UIColor blueColor];  
  5. // 左边返回按键颜色  
  6. // 导航栏标题颜色  
  7. [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];  
  8. self.navigationController.navigationBar.translucent = NO;  

//iOS 隐藏/去掉 导航栏返回按钮中的文字

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)

 forBarMetrics:UIBarMetricsDefault];

 

// init with image

let item=UIBarButtonItem.init(image:UIImage.init(named: "goback") , style: .plain, target: self, action: #selector(goBack))

 

//修改返回键的颜色

self.navigationController.navigationBar.tintColor = [UIColor redColor];  

 

横向修改

UIButton *settingBtn = [SHUtils creatCustomButtonWithFrame:CGRectMake(0, 0, 60, 40) btnTitle:@"设置" btnFontSize:14 titleColor:[UIColor blackColor]];

[settingBtn addTarget:self action:@selector(clickTheSettingBtn) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *rightBar = [[UIBarButtonItem alloc]initWithCustomView:settingBtn];

UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]

                                   initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace

                                   target:nil action:nil];

negativeSpacer.width = -20;

self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:negativeSpacer,rightBar,nil];

纵向修改

navigationItem.leftBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);

 

(new UInavigationController的页面修改可以修改这条线中所有的),BackButton输入内容可以生成一个backitem,可以修改属性,要注意观察这条栈中可能会有多个backitem,那么就可能导致下面这个方法执行了还是没有隐藏成功。一般是xib中有多个backItem,代码也可以生成的,backItem貌似是可以传递给下一个UIViewController,如果是xib中有多个backItem就是把所有的backItem删除就可以了,或者在代码中在生成BackItem的这个UIViewControll中执行一次下面的代码,

        let item = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

        self.navigationItem.backBarButtonItem = item

如果修改第三方库或者Pod中的navigationBar,建议每次clear一下再run,会有缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vant Tabbar 是一个基于 Vant UI 框架的选项卡组件,用于在移动端创建底部导航栏。它允许你在页面底部放置多个标签按钮,并且可以通过切换标签来切换页面内容。使用 Vant Tabbar 可以方便地实现类似微信底部导航栏的效果。 你可以通过以下步骤来使用 Vant Tabbar: 1. 安装 Vant UI:首先确保你的项目已经安装了 Vant UI,可以通过 npm 或 yarn 进行安装。 ```shell npm install vant ``` 2. 导入 Tabbar 组件:在需要使用 Tabbar 的页面中,导入 Tabbar 组件并注册。 ```javascript import { Tabbar, TabbarItem } from 'vant'; export default { components: { [Tabbar.name]: Tabbar, [TabbarItem.name]: TabbarItem, }, }; ``` 3. 使用 Tabbar 组件:在模板中使用 Tabbar 组件,并设置相应的属性和事件。 ```html <template> <div> <tabbar v-model="activeTab"> <tabbar-item icon="home-o" to="/home">首页</tabbar-item> <tabbar-item icon="search" to="/search">搜索</tabbar-item> <tabbar-item icon="shopping-cart-o" to="/cart">购物车</tabbar-item> <tabbar-item icon="user-o" to="/profile">我的</tabbar-item> </tabbar> </div> </template> ``` 在上面的示例中,`v-model` 绑定了当前选中的标签按钮的索引,`to` 属性指定了每个标签按钮对应的路由路径。 4. 处理 Tabbar 切换事件:通过监听 `activeTab` 的变化,可以在页面中处理标签切换的逻辑。 ```javascript export default { data() { return { activeTab: 0, }; }, watch: { activeTab(index) { // 处理标签切换逻辑 }, }, }; ``` 通过以上步骤,你就可以在你的移动端应用中使用 Vant Tabbar 组件来创建底部导航栏了。希望这能帮到你!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值