(转)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)) |