此篇,我基於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;
}