(转)iOS7和iOS6适配,和保留之前的坐标编码习惯,不用刻意加减

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

//目的:用于iOS7和iOS6适配,和保留之前的坐标编码习惯,不用刻意加减

 

/*方法1:

 *1。在vc中重写viewDidLayoutSubviews方法

 *2。是用下面2个方法之一;

 *3。frame为ios6风格,状态栏和导航栏为平铺

 *4。bounds为ios7风格,状态栏和导航栏为覆盖

 *5。优点,所有subview的坐标都一ios6的标准进行编写,支持push和present

 *6。缺点,在push中每个vc都需要重写viewDidLayoutSubviews方法;

 */

void IOS7ToIOS6ofFrame(UIViewController*vc);

void IOS7ToIOS6ofBounds(UIViewController*vc);

 

void IOS7ToIOS6ofFrame(UIViewController*vc)

{

    if (IsIOS7) {

        CGRectrect = vc.view.frame;

        vc.view.frame= CGRectMake((rect.origin.x), (rect.origin.y+(IsIOS7?vc.topLayoutGuide.length:0)), (CGRectGetWidth(rect)), (CGRectGetHeight(rect)-(IsIOS7?vc.topLayoutGuide.length:0)));

    }

}

 

void IOS7ToIOS6ofBounds(UIViewController*vc)

{

    if (IsIOS7) {   

        CGRectrect = vc.view.bounds;

        if (rect.origin.y!= -1*vc.topLayoutGuide.length) {

            vc.view.bounds= CGRectMake((rect.origin.x), (rect.origin.y+(IsIOS7?vc.topLayoutGuide.length*(-1):0)), (CGRectGetWidth(rect)), (CGRectGetHeight(rect)));

        }

    }

}

 

/*方法2:

 *1.在vc的init或viewdidload中使用IOS7宏即可;

 *2.状态栏和导航栏为平铺

 *3.优点:所有subview的坐标都一ios6的标准进行编写,支持push,背景frame值同ios6

 *4.缺点:在push中每个vc都需要写,不支持present;

 */

 

#define IOS7 if([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)\

{self.extendedLayoutIncludesOpaqueBars= NO;\

self.modalPresentationCapturesStatusBarAppearance=NO;\

self.edgesForExtendedLayout= UIRectEdgeNone;}

 

/*方法3:

 *1.使用self.navigationController.navigationBar.translucent =NO;

 *2.状态栏和导航栏为平铺

 *3.优点:所有subview的坐标都一ios6的标准进行编写,支持push,背景frame值同ios6,只需要设置一次

 *4.缺点:必须有nav;对于present的vc必须为nav

 */

 

/*方法4:

 *1.重新定义CGRECT;

 *2.状态栏和导航栏为覆盖

 *3.优点:随时可以用

 */

#define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)

#define CGRECT_NO_NAV(x,y,w,h) CGRectMake((x), (y+(IsIOS7?20:0)), (w), (h))

#define CGRECT_HAVE_NAV(x,y,w,h) CGRectMake((x), (y+(IsIOS7?64:0)), (w), (h))

posted @ 2013-12-27 17:31  杀死本页  阅读(194)  评论(0编辑  收藏  举报