• self.view的Y值问题


    在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。有时会加上顶部tool bar的高度 20, 20+44 = 64。而且下面tabbar也缩进的49

    解决办法

    - (void)viewDidLoad  
    {  
        [super viewDidLoad];  
        // Do any additional setup after loading the view.  
        if (OSVersionIsAtLeastiOS7()) {  
            if ([self respondsToSelector:@selector(edgesForExtendedLayout)])  
            {  
                self.edgesForExtendedLayout = UIRectEdgeNone;  
            }  
        }  
    }  

    如果设置成 self.edgesForExtendedLayout = UIRectEdgeBottom;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕底部; 
    如果设置成 self.edgesForExtendedLayout = UIRectEdgeNone;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕tabBar上部; 
    如果设置成 self.edgesForExtendedLayout = UIRectEdgeTop;那么就会self.view.frame是从navigationBar上面计算面开始计算一直到屏幕tabBar上部;

    iOS7以上系统,self.navigationController.navigationBar.translucent默认为YES,self.view.frame.origin.y从0开始(屏幕最上部)。

    此时若是添加代码self.edgesForExtendedLayout = UIRectEdgeNone(iOS7.0以后方法);self.view.frame.origin.y会下移64像素至navBar下方开始。但是此时当push到一个新的controller之前给当前屏幕截图的时候[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];,由于navBar是透明的,会出现64像素的黑色区域。

    此时只需要把self.navigationController.navigationBar.translucent=NO即可,不需要加代码self.edgesForExtendedLayout;

    iOS7之后也增加了一个self.tabBarController.tabBar.translucent的属性,默认为YES。当应用同时使用navBar和TabBar的时候。设置self.tabBarController.tabBar.translucent=NO并且self.navigationController.navigationBar.translucent=NO时候,得到self.view.frame—>{{0, 64}, {320, 455}}。视图的高度也改变为navBar和tabBar之间的455像素。当self.navigationController.navigationBar.translucent=YES并且self.tabBarController.tabBar.translucent=NO的时候self.view.frame—>{{0, 0}, {320, 519}};其都为YES的时候self.view.frame—>{{0, 0}, {320, 568}};

    注意:设置self.edgesForExtendedLayout = UIRectEdgeNone;的时候会使得navBar和tabBar都不占空间。self.view.frame—>{{0, 64}, {320, 455}}。此时iOS7默认navBar和tabBar都是透明的。截图的时候需要注意。

    iOS6以下系统,默认navBar和tabBar都不占空间。

  • 相关阅读:
    MVC 导出Execl 的总结几种方式 (一)
    MVC 中导出Execl 对 科学计数 的转化
    MVC 中使用kindEditor 图片上传在IE 上进行上传出现的问题
    C# 后台处理图片的几种方式
    MVC 手机端页面 使用标签file 图片上传到后台处理
    MVC 中使用log4net 打印重复日志解决方法
    MVC 初始 Log4net (一)
    MVC 局部加载页面的实例
    K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署
    K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署
  • 原文地址:https://www.cnblogs.com/BinZone/p/9355549.html
Copyright © 2020-2023  润新知