• iOS 7:用代码解决视图控制器的View整体上移问题[转载]


    1. self.automaticallyAdjustsScrollViewInsets = NO;//    自动滚动调整,默认为YES
    1. self.navigationController.navigationBar.translucent = NO;//    Bar的模糊效果,默认为YES
    1. self.edgesForExtendedLayout = UIRectEdgeNone;//    iOS7及以后的版本支持,self.view.frame.origin.y会下移64像素至navigationBar下方。

     http://www.cocoachina.com/bbs/read.php?tid=280826

    http://www.jianshu.com/p/bcd21a0d826c

    self.view.fream

    http://blog.csdn.net/zuoerjin/article/details/24373453

    第一种方法:

    // 设置CGRectZero从导航栏下开始计算    

    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {

            self.edgesForExtendedLayout = UIRectEdgeNone;

       }

    第二种方法:

    //    self.navigationController.navigationBar.translucent = YES;或者NO;

    第三种方法:

    //    self.automaticallyAdjustsScrollViewInsets = NO;

    三种方法效果差不多,但是也有部分差异,笔者推荐第一种。

        //nav的第一个子视图是scrollview的时候   系统才自动给scrollview加上64的inset 这偏移与第三方的下拉刷新冲突

        self.automaticallyAdjustsScrollViewInsets = NO;

         //解决冲突 禁止系统偏移(一般不用这个)

         self.navigationController.navigationBar.translucent = YES;

         

         // 设置CGRectZero从导航栏下开始计算

         if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {

         self.edgesForExtendedLayout = UIRectEdgeNone;

         }

    如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了。当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度。于是你的视图上移了,并和上层的状态栏交叠在一起。

    你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度)。

    但是苹果显然已经考虑到这个问题,他们在 iOS 7 SDK 中为 ViewController 提供了一个 edgesForExtendedLayout 新属性。如果你将这个属性设置为UIRectEdgeNone,则 viewController 的所有子视图都会自动调整,这样在 iOS 7 下看到的效果和 iOS 6 完全一样。

    为了方便,你可以为 UIViewController 扩展一个子类,并覆盖它的 viewDidLoad 方法:

    @implementation DerivedViewController

    - (void)viewDidLoad

    {

        [superviewDidLoad];

    if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])

           self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    @end

    然后你以后所有的 ViewController 都从这个 DerivedViewController 类继承。

    但不幸的是,我们的程序仍然有大量 iOS<7 的用户 ,我们无法立即抛弃对 iOS 6 的支持。无论 edgesForExtendedLayout 还是UIRectEdgeNone,都只能在 iOS7 下有效。对于 iOS 6,我将以上代码修改为:

    - (void)viewDidLoad

    {

        [superviewDidLoad];

    #if__IPHONE_OS_VERSION_MAX_ALLOWED >= 70000

        if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])

           self.edgesForExtendedLayout = UIRectEdgeNone;

    #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 *viewin 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 判断 deployment target 是否 >7.0。>7.0则使用新的 edgesForExtendedLayout API,负责使用比较笨的方法逐个下移 subviews,并自动根据状态栏/导航栏的可视状态计算要移动的偏移量。

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

  • 相关阅读:
    用python抓取百度指数 以及 用cxfreeze打包的经验
    selenium中send_keys的使用
    python之文件调用
    学习python之selenium
    学习python图像识别
    解决方案: 运行ugarchroll,报错Error in try(.C("c_qstd", p = as.double(p), mu = as.double(mu), sigma = as.double(sigma), : NA/NaN/Inf in foreign function call (arg 3)
    int 转 const char*
    均值,方差,协方差,协方差矩阵,特征值,特征向量
    OpenCv 图片上添加汉字
    OpenCV获取与设置像素点的值的几个方法
  • 原文地址:https://www.cnblogs.com/lvyinbentengzhe/p/5407060.html
Copyright © 2020-2023  润新知