`
dcj3sjt126com
  • 浏览: 1871372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS:hidesBottomBarWhenPushed的正确用法

    博客分类:
  • IOS
 
阅读更多

转自:http://www.isaced.com/post-223.html  

借鉴部分作为参考

今天说的是在TabBar嵌套Nav时,进行Push的时候隐藏TabBar的问题。

之前项目也需要这么做,那时候iOS7还没出,也是各种搜罗,后来的解决方法是当push操作的时候自己隐藏Tabbar,push过去视图拉伸适应屏幕,再pop回来的时候接再显示Tabbar,过程复杂还需要自己写动画,最终效果也不是很理想。

前两天公司APP上架,当时没有适配iOS7,在XCode4.6上开发编译并发布,居然在iOS7下跑起来没有太大的问题,只是一个Nav的文字错位,有闪退,不过勉强还能用,其中有自定义Tabbar,有很多动画,后来在一篇介绍iOS7适配的文章中看到这么一句话:

 

在Xcode 4.6上使用iOS 6 SDK进行编译的app在iOS 7上运行时是采用一种特殊的模拟模式,它试图保存app原来的样子。但是一旦你升级到了Xcode 5,在iOS 7SDK上编译,你的app就会开始出现状况了。

 

已经写的很清楚了,于是我再到Xcode5中编译运行原来的项目,就破漏百出了,开始完全崩溃,各种问题浮现。

好了,回到今天说的正题,先和大家说说hidesBottomBarWhenPushed,从这个属性名也能知道它的意思了,官方的解释是这样:

 

If YES, then when this view controller is pushed into a controller hierarchy with a bottom bar (like a tab bar), the bottom bar will slide out. Default is NO.

 

大致意思是如果为YES,当这个控制器push的时候,底部的Bar,比如Tabbar会滑走,也就是不会在push后的视图上显示出来,默认值为NO。

我讲的场景大概为这个样子:

整体架构

最外面是一个TabBarController,套了两个NavgationController,当其中一个VC push下去的时候,一般情况是这样:

default push

当隐藏Tabbar的时候再push,效果是这样:

after push

怎么样,是不是有时候确实会遇到这样的情况?其实苹果真的考虑的很周全,为我们创造了hidesBottomBarWhenPushed这个属性,为了解决这个问题。代码非常简单,一句或者两句话即可,这里得分几种Push的情况。

Case1:xib加载或者Storyboard用identifier获取Controller

 

    self.hidesBottomBarWhenPushed = YES;
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"state"];
    [self.navigationController pushViewController:vc animated:YES];
    self.hidesBottomBarWhenPushed = NO;

 

Case2:拉线,也就是Storyboard用performSegue

 

self.hidesBottomBarWhenPushed = YES;
[self performSegueWithIdentifier:@"index2notice" sender:nil];
self.hidesBottomBarWhenPushed = NO;

 

Tip:经测试证明,此种方式只会对后面的一级生效,继续往后Push还会出现TabBar,要继续往后push也隐藏Tabbar还得使用Case3的方法!

Case3:拉线,在prepareForSegue函数里

 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}

 

暂时就用到这几点,我之前的做法,自己手动隐藏,拉伸view,显示不但麻烦,兼容性也不好,移到iOS7上问题多多,不过用这个属性可以非常方便的实现此需求,并且在iOS6上也完美兼容哦。

注意:还有个问题,这个属性只支持非自定义的Tabbar,也就是只支持原生Tabbar,如果是自定义的Tabbar会产生你意想不到的效果,我之前就遇到过,因为使用hidesBottomBarWhenPushed后,系统内部会处理TabbarController上Tabbar这个View,我之前自定义的Tabbar做法是吧原生Tabbar这个View隐藏掉,然后添加到自己绘制的Tabbar View上去,缺点就是这样你的自定义的TabBarview接收不到系统应有的一些响应,于是我尝试着把自定义的TabBar View添加到原来的TabBar View上,也就是不隐藏原生的TabBar,而是覆盖在上面,看不出任何区别,效果也能达到上面图片的效果!

分享到:
评论

相关推荐

    iOS自定义Tabbar

    本文将深入探讨如何在iOS应用中实现自定义Tabbar,以及如何利用`hidesBottomBarWhenPushed`属性来控制页面推入时Tabbar的显示状态。 首先,让我们了解自定义Tabbar的基本步骤: 1. 创建TabbarController:在iOS...

    iOS界面跳转时导航栏和tabBar的隐藏与显示功能

    虽然在push时设置了`hidesBottomBarWhenPushed`,但在pop回A页面前将其设回`NO`可以确保TabBar正确显示: ```objc self.hidesBottomBarWhenPushed = NO; ``` 这样,当用户从B页面返回A页面时,TabBar就会重新出现。...

    iOS的UI开发中UITabBarControlle的基本使用教程

    本教程将详细介绍`UITabBarController`的基本使用方法,重点是基于Objective-C的代码实践。 ### 一、`UITabBarController`简单介绍 `UITabBarController`类似于`UINavigationController`,它能够管理多个子控制器...

    隐藏TabBar的一些方法小结

    在`shouldHideTabBar`发生变化时,调用此方法: ```swift func updateTabBarVisibility() { guard let tabBar = tabBarController?.tabBar else { return } tabBar.translatesAutoresizingMaskIntoConstraints ...

    UITabBarController

    10. **多语言支持**: 如果应用需要支持多语言,`UITabBarItem`的标题应使用`NSLocalizedString`来获取,确保在不同语言环境下正确显示。 总的来说,`UITabBarController`在iOS应用开发中扮演着至关重要的角色,提供...

    UITabBarController的使用

    下面我们将深入探讨`UITabBarController`的使用方法和相关知识点。 1. **初始化与设置** `UITabBarController` 可以通过代码或者Storyboard进行初始化。在代码中,你可以使用`initWithRootViewController:`或`...

    iOS开发中简单实用的几个小技巧

    如果只想设置UIView的左上角和右上角为圆角,可以使用以下方法: ```swift let blueView = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) blueView.backgroundColor = .blue let maskPath ...

    HideTabbar

    为了在多个地方都能方便地隐藏和显示tab bar,你可以创建一个`UITabBarController`的类别扩展,封装上述代码为两个方法: ```swift extension UITabBarController { func hideTabBar(animated: Bool) { UIView...

    ZXing QRCode Scan

    iOS ZXing QRCode Scan Parse How to use it in your code: 1. #import <ZXingWidgetController.h> in header file. 2. #import <QRCodeReader.h> in impliment file. 3. ZXingWidgetController *wid_ctrl = [...

    隐藏自定义tabbar

    有两种常见方法: 1. 使用`hidesBottomBarWhenPushed`属性:在需要隐藏TabBar的ViewController中设置`self.hidesBottomBarWhenPushed = true`,这样在push这个ViewController时,TabBar会自动隐藏。当返回时,...

    StickyTabBarViewController:标签栏顶部的粘滞和可折叠视图

    只要在其顶部分配了粘性视图控制器,标签栏就可见(在任何时候推送的任何vc都不hidesBottomBarWhenPushed设置为true 。 安装 StickyTabBarViewController可通过和。 SPM安装:通过将其添加为新的软件包依赖项 ...

    自定义Tabbar

    在iOS中,我们可以使用UIKit框架中的UITabBarController和UITabBarItem来构建基本的Tabbar。然而,为了实现自定义外观和功能,我们需要创建一个自定义视图类,继承自UITabBar,并重写其drawRect方法来绘制自定义的...

    UISearchController Demo

    在iOS开发中,UISearchController是苹果提供的一种用于实现搜索功能的高级API,它替代了之前的UISearchDisplayController和UISearchBar的组合。本教程将深入探讨`UISearchController`的相关知识点,帮助你理解和掌握...

    UITabBarController使用案例

    在iOS应用开发中,`UITabBarController`是一个非常重要的组件,它是苹果提供的UI控制器类,用于实现底部标签栏切换不同视图控制器的功能。本篇我们将深入探讨`UITabBarController`的使用案例,以及如何通过源码和...

    高度自定义TabBarController组件ESTabBarController.zip

    hidesBottomBarWhenPushed = true , 第二种则不需要在ESTabBarController中,通过添加Container视图到UITabBar的方式来兼容这两种层级处理方式。6、支持自定义使用ESTabBarController可以实现:自定义选中颜色和样式...

    buttonTouchEventTest:修复Button touchDown bug

    简单地说,在设置detailVC.hidesBottomBarWhenPushed = YES;之后,放一个view在tabbar原来的位置上,再在view上添加一个button,像这样为button添加touchDown action,当按住button的左下角区域时,action没有被触发...

    使用runtime 实现weex 跳转原生页面

    在实现过程中,我们可以创建两个方法:`pushViewController`和`presentViewController`,这两个方法分别用于在导航控制器中push新页面和模态展示新页面。它们接受页面类名(`vcName`)和一个属性字典(`param`),...

Global site tag (gtag.js) - Google Analytics