美文网首页
2018-07-19关于导航栏

2018-07-19关于导航栏

作者: 北你妹的风 | 来源:发表于2018-07-20 09:23 被阅读15次

    通过UINavigationController组织视图层级时,导航栏是个不大不小的坑。

    navigationBar有个属性translucent,透明度或模糊度。ios 7之后默认为YES。

    在navigationController push操作的时候,要注意视图组件的坐标。

    当translucent的值为YES时,视图的坐标起始位置时从(0,0)开始的,这就会造成导航栏会盖住视图的一部分,肯定不是我们想要的。

    当translucent的值为NO时,视图的坐标起始位置时从(0,64)开始的,一切看起来是正常的。

    不管你push的视图是滚动视图还是非滚动视图。

    当然,还有一个方法是可以的

    self.edgesForExtendedLayout=UIRectEdgeNone;

    如果页面较多的时候,可以通过分类或者继承,减少代码量。

    #import "UIViewController+Nav.h"

    @implementationUIViewController (Nav)

    -(void)addNavBar{

        self.edgesForExtendedLayout=UIRectEdgeNone;

        UIBarButtonItem*leftBar=[[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(gotoBack)];

        self.navigationItem.leftBarButtonItem=leftBar;

    }

    -(void)gotoBack{

        [self.navigationController popViewControllerAnimated:self];

    }

    隐藏导航栏底部横条的小技巧:

    1、单个页面

    - (void)viewWillDisappear:(BOOL)animated {

        [super viewWillDisappear:animated];

        [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

        [self.navigationController.navigationBar setShadowImage:nil];

    }

    2、全局页面

    [[UINavigationBarappearance] setBackgroundImage:[[UIImagealloc] init] forBarMetrics:UIBarMetricsDefault];

    [[UINavigationBarappearance] setShadowImage:[[UIImagealloc] init]];

    3、

    self.navigationController.navigationBar.clipsToBounds =YES;

    4、设置导航栏底部线条颜色

    UINavigationBar*navigationBar =self.navigationController.navigationBar;

     [navigationBar setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAnybarMetrics:UIBarMetricsDefault];

    [navigationBar setShadowImage:[UIImage  imageWithColor:[UIColorredColor]]];

    + (UIImage*)imageWithColor:(UIColor*)color{

    CGRectrect =CGRectMake(0.0f,0.0f,1.0f,1.0f);UIGraphicsBeginImageContext(rect.size);

    CGContextRefcontext =UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [colorCGColor]);

    CGContextFillRect(context, rect);

    UIImage*image =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();returnimage;}

    相关文章

      网友评论

          本文标题:2018-07-19关于导航栏

          本文链接:https://www.haomeiwen.com/subject/pqhfmftx.html