此篇,我基于storyboard纪录一下项目如何适配ios6 ios7.
步骤:
1 导航栏问题解决。众所周知,iphone5 为4寸,iphone4 为3.5寸,所以为适配iphone4 iphone5 导航栏的大小不一,且ios7 时,坐标从(0,0)开始。
创建UINavigationController的子类
在子类中添加:
#pragma mark一个类只会调用一次
+ (void)initialize
{
// 1.取出设置主题的对象
UINavigationBar *navBar = [UINavigationBar appearance];
// 2.设置导航栏的背景图片
NSString *navBarBg = nil;
if (IOS7Later ) { // iOS7
navBarBg = @"navBG64";
navBar.tintColor = [UIColor whiteColor];
} else { //非iOS7
navBarBg = @"navBG";
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
}
[navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault];
NSLog(@"navFrame: %@",NSStringFromCGRect(navBar.frame));
// 3.标题
[navBar setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor whiteColor]
}];
}
#pragma mark控制状态栏的样式
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;//黑色
// return UIStatusBarStyleLightContent;
}
2 设置viewcontroller中属性
(1)self.automaticallyAdjustsScrollViewInsets = NO;
看这个UIViewController的这个属性你就明白了,此属性默认为YES,这样UIViewController下如果只有一个UIScollView或者其子类,那么会自动留出空白,让scollview滚动经过各种bar下面时能隐约看到内容。但是每个UIViewController只能有唯一一个UIScollView或者其子类,如果超过一个,需要将此属性设置为NO,自己去控制留白以及坐标问题。
(2)
if
(IOS7)
{
self
.edgesForExtendedLayout = UIRectEdgeNone;
//视图控制器,四条边不指定
self
.extendedLayoutIncludesOpaqueBars =
NO
;
//不透明的操作栏
self.modalPresentationCapturesStatusBarAppearance = NO;
}