• iOS 7 :解决ViewController的View整体上移的问题


    解决iOS7视图控制器的View整体上移20个像素

      当我们在使用Xcode5创建一个新的项目的时候,我们会发现之前运行在iOS6上面的App整体的视图都向上移动了20个像素点,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度,于是iOS6上的控制器视图和上面的状态栏交叠在一起了。

      关于这个问题,我们的解决方法:

        苹果在升级到ios7的时候已经考虑到控制器视图整体上移的这个问题,于是就在iOS7 SDK中为视图控制器添加了一个新的属性edgesForExtendedLayout,将此属性设置为UIRectEdgeNone,然后所有ViewController的View就整体上移了20个像素点。

      为了我们的App可以同时支持iOS6和iOS7,为了方便,我们可以建立一个BaseViewController,重写它的ViewDidLoad方法,代码如下

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
        if([self respondsToSelector:@selector(edgesForExtendedLayout)])
        {
            self.edgesForExtendedLayout = UIExtendedEdgeNone;
        }
    #else
        float barHeight =0;
        if (!isIPad()&& ![[UIApplication sharedApplication] isStatusBarHidden]) {
            barHeight+=([[UIApplication sharedApplication]statusBarFrame]).size.height;
        }
        if(self.navigationController &&!self.navigationController.navigationBarHidden) {    barHeight+=self.navigationController.navigationBar.frame.size.height;
        }
        for (UIView *view in self.view.subviews) {
            if ([view isKindOfClass:[UIScrollView class]]) {
                view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height - barHeight);
            } else {
                view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height);
            }
        }
    #endif
    }

      使用宏 __IPHONE_OS_VERSION_MAX_ALLOWED 判断当前是否是iOS7及其以上的版本。>7.0则使用新的 edgesForExtendedLayout API,遍历子视图逐个下移 subviews,并自动根据状态栏/导航栏的可视状态计算要移动的偏移量。

    注:如果已升级至Xcode5,将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型可解决此问题。

  • 相关阅读:
    C# 斐波拉契数列
    Visual Studio [即时窗口] & [命令窗口] (Immediate Window & Command Window) 转
    在.NET平台下 有哪些数据持久层框架 (转)
    WebPart 控件之间通讯 笔记
    WebPart的数据库连接问题 转
    C 语言函数要先声明后定义
    C#单例模式的三种写法(转)
    WCF 绑定wshttpbinding
    关于C#中派生类调用基类构造函数的理解 base使用
    ThinkPHP3.* 模型操作相关函数
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3886766.html
Copyright © 2020-2023  润新知