• navigationcontroller剖析


    概述:

    系统原生的navigationcontroller非常强大, 几乎所有的程序都基于系统的导航控制器做开发

    它的navigationbar的有2种形态

    navigationbar的frame其实是CGRectMake(0, 20, 设备宽度, 44)

    self.navigationBar.layer.masksToBounds = YES; 

    ,-setMasksToBounds:方法告诉layer将位于它之下的layer都遮盖住。这是必须的,这样会使圆角不被遮,但是这样会导致阴影效果没有,很多网上都给出资料,再添加一个SubLayer,添加阴影。(意思也就是讲mask作为bound的边界,对原来的frame进行裁剪??)

    navigationbar的frame就会变成是CGRectMake(0, 20, 设备宽度, 44)

    1.translucent = YES

    2.1.translucent = NO

    一. translucent = YES的情况

    scrollview会自动设置insets,

    并且导航是半透明的,

    self.view的起点是(0, 0)

    设置一张透明图片, 并且设置UIBarMetricsCompact参数, 就可以让导航看起来是透明的

     [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"bigShadow.png"] forBarMetrics:UIBarMetricsCompact];

    一. translucent = NO的情况

    scrollview不会做任何适配

    并且导航是不透明的,

    self.view的起点是(64, 0)

    二.导航控制器的层次剖析

    2.1. NavigationBar

    包含子视图

    _UINavigationBarBackground

    _UINavigationBarBackIndicatorView

    2.2.UINavigationTransitionView

    包含子视图

    UIViewControllerWrapperView

     

    三.导航对控制器的处理

    3.1.如果导航控制器的translucent=NO, 并且viewcontroller里一个子控制器

    如果设置在viewdidload方法或之前的方法里

    设置了 childviewcontroller.view.frame = cgrectmake(0, 0, self.view.width-64, self.view.height);

    那么你的childviewcontroller.view的高度就会比预计少64px,( 因为导航控制器的translucent=no的情况下, 会把当前所有的控制器的view的height全部减去64)

  • 相关阅读:
    Atitit. 真正的全中国文字attilax易语言的特点以及范例
    Atitit.nosql api 标准化 以及nosql数据库的实现模型分类差异
    Google"员工"曝内幕:Google员工的17个秘密
    WINDOWS 乱码解决
    计算机软件开发文档编写指南
    概要设计阶段概要设计说明书
    关于管理的经典故事(员工激励)
    概要设计阶段组装测试计划
    一个还不太老的程序员的体会
    程序员四大忌 你该如何避免呢?
  • 原文地址:https://www.cnblogs.com/apem/p/4969571.html
Copyright © 2020-2023  润新知