ios7適配一些問題

ios7適配一些問題

1.      如何判斷版本

如果你已經開發過ios舊版本的app,現在想適配在ios7上,那如何判斷現在的版本類型是一個很有用的辦法:

[[[UIDevice currentDevice] systemVersion] floatValue] < 7.0  //如果當前ios版本小於7

通過該判斷你可以寫出針對於ios7的分支代碼出來,對於一些細節的問題非常有用。

2.      佈局問題

ios7適配中,佈局問題是一個很頭痛也很重要的問題,因爲在ios7viewController使用了全屏佈局的方式,也就是說導航欄和狀態欄都是不佔實際空間的,狀態欄默認是全透明的,導航欄默認是毛玻璃的透明效果。

如果在ios7中加入一個view,我們可以看到以下代碼的效果:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,100)];

[label setText:@”大家好”];

[label setTextColor:[UIColor blueColor]];

[label setBackgroundColor:[UIColor blueColor]];

[self.view addSubview:label];

方案一:

self.navigationController.navigationBar.translucent = NO;

這句話的意思就是讓導航欄不透明且佔空間位置,所以我們的座標就會從導航欄下面開始算起。

方案二:

       self.edgesForExtendedLayout = UIRectEdgeNone;

    edgesForExtendedLayoutios7的新屬性,所以在ios7以下設備會出現奔潰現象,解決辦法就是先判斷在使用,可以通過判斷系統版本,也可以通過判斷方法是否可使用

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])

edgesForExtendedLayout默認的值是UIRectEdgeAll就是全部佈局的意思,改成UIRectEdgeNone就會和ios7一起的系統版本一樣的效果

方案三:

ios7單獨定製位置,通過判斷系統版本,個性爲ios7定製位置。

       const BOOL is_ios7 = [[[UIDevice currentDevice] systemVersion] floatValue] < 7.0;

       int y= is_ios7 ? 64 : 0;

3.      UITableView樣式

ios開發中UITableView是最常用的控件,ios7對於UITableView的改動也是非常大的。

1.佈局上

上面說的ios7的初始化位置都是從屏幕開始的,但是如果你使用UITableView全屏顯示會發現他的位置是正確的,而且導航欄的毛玻璃效果閃閃發亮。那是因爲在ios7controller中增加了automaticallyAdjustsScrollViewInsets屬性,默認值爲YES。他的作用就是如果視圖中有唯一的ScrollView存在,那麼它會自動改變ScrollViewcontentView的位置,讓其不會讓導航欄擋住,也能讓ContentView移上去的時候在導航欄後面顯示。

當然,然後視圖裏的ScrollView不滿足系統的要求,我們就需要自己控制contentView的位置了:

UIEdgeInsets contentInset = self.tableView.contentInset;

contentInset.top = 64;

[self.tableView setContentInset:contentInset];

這樣也就是達到了automaticallyAdjustsScrollViewInsets屬性的效果

2.樣式上

ios7上的tableView樣式有很大的改動,尤其是grouped樣式下。

我們可以看到ios7cell的分割線是默認不會畫滿的,空出的位置大小是會根據cell.imageView的大小決定了。如果你他能跟ios6一樣的效果,值需要將cellseparatorInset屬性的left值改成0即可。

4.      statusBar修改樣式

大家可能發現了在ios7statusBar的顏色明明可以有下面幾種選擇的但是缺沒有效果。

UIStatusBarStyleDefault      默認色,隨背景顏色深淺改變,優先黑色

UIStatusBarStyleLightContent  隨背景顏色深淺改變,優先白色

UIStatusBarStyleBlackTranslucent 黑色透明

解決方法:

第一步:Plist裏面添加UIViewControllerBasedStatusBarAppearance 設置爲:NO        
第二步:在入口類中寫:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

5.      其他問題

UILable背景問題

           ios7UILable的背景默認是clearColor,而ios6中默認是白色

UIButton樣式問題

ios7UIButton默認是沒有背景框的,在ios6中有明顯的默認邊框


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章