zoukankan      html  css  js  c++  java
  • IOS6和IOS7的屏幕适配问题

    自从IOS7出来以后,以前写在IOS6上或者更低版本的程序,跑在IOS7的模拟器上就会出现一些问题。最大的问题就是,所有的UI空间都会统一向上移动20个点(如果空间的y值为0,就会被StatusBar挡住),造成原来在IOS6下精心布局的界面在IOS7下特别难看。

    IOS7和IOS6最大的区别,除了扁平化设计以外,就是全屏App。在IOS7的情况下,状态栏也是控制器的View的一部分。坐标点的y值,不再是从StatusBar的底部开始,而是从StatusBar的顶部开始。我们可以很明显地感受到,以前在IOS6的情况下,我们用 [UIApplication ShareApplication].StatusBarStyle 来设置状态栏的样式。但是用IOS7的情况下,该方法是无效的。相反,设置StatusBar的样式的方法,被Apple放在Controller里面了,成为了控制器方法,不在交给UIApplication来处理。

    为了解决IOS6和IOS7的适配问题,我针对不同情况列举了一些方法,供广大开发者参考。

    一、没有包装任何 导航控制器 或者 UITabBarController

    1.控制器的viewUIScrollViewUITableViewUICollectionView时(控制器是UITableViewController的时候)

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        

    #ifdef __IPHONE_7_0

        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

            self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);

        }

    #endif

    }

    2.控制器的view是普通的UIView,非UIScrollView

    #ifdef __IPHONE_7_0

    - (void)viewDidLayoutSubviews

    {

        // iOS7 && 没有包装导航控制器

        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0 && self.navigationController == nil) {

            CGFloat top = [self.topLayoutGuide length];

            

            // 是否能滚动

            if ([self.view isKindOfClass:[UIScrollView class]]) {

                UIScrollView *scroll = (UIScrollView *)self.view;

                scroll.contentInset = UIEdgeInsetsMake(top, scroll.contentInset.left, scroll.contentInset.bottom, scroll.contentInset.right);

            } else {

                CGRect bounds = self.view.bounds;

                bounds.origin.y =  - top;

                self.view.bounds = bounds;

            }

        }

    }

    #endif

    二、包装有导航控制器的情况

    1> 控制器的view不是UIScrollView

    #ifdef __IPHONE_7_0

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

        self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    #endif

    2> 控制器的viewUIScrollView

    不需要写额外的代码适配

    三、其他情况(上述情况不用死机,只要掌握以下几点规律)

    1.想让view的内容往下挪动

    1> UIView设置boundsy

    2> UIScrollView设置contentInsettop

    2.防止子控制器的view被导航栏或者tabbar遮住

    self.edgesForExtendedLayout = UIRectEdgeNone;

    四、多控制器嵌套处理

    1.当多重控制器嵌套的时候,最合理的方案是:UITabBarController内部嵌套UINavigationController

    2.UITableViewController的直接父控制器是UINavigationController时,不需要编写任何适配代码

    3.其他非UITableViewController需要加上适配代码

    #ifdef __IPHONE_7_0

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

        self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    #endif

  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/gatsbywang/p/3503485.html
Copyright © 2011-2022 走看看