iOS7适配问题总结
一、狀態欄(statusBar)
在iOS7中view默認是全屏模式,狀態欄的高度也加在了view的高度上,例如iOS7之前iphone5中self.view.frame.size.height = 548,在iOS7中就是568了,在iOS7中navigationbar是半透明的,statusbar則是全透明的,這樣一來,原來的程序用xcode5+iOS7sdk上編譯后運行就會出現問題了。
(一)沒有導航欄的viewController適配方法
下面是以一個實例來說明:
1.首先創建一個測試工程,根視圖是一個UIViewController,在view上添加一個button,frame為(0,0,100,40),運行結果如圖:
button和狀態欄重疊了,也就是說,在沒有導航欄的情況下,代碼運行在iOS7上,內容向上偏移了20px,通過查閱資料,找到兩種解決方法:
(1)設置self.view.bounds,代碼如下:
運行結果:
這種方法需要更改每一個viewController,較為麻煩
2.設置window,在appdelegate.mapplication: didFinishLaunchingWithOptions:方法中添加代碼如下:
這種方法可以影響所有的subview。
運行之后發現狀態上的內容看不到了:
解決方法:在info.plist文件中添加View controller-based status bar appearance項,設置為NO。
(二)有導航欄的viewController適配方法
現在將根視圖改為UINavigationController,不設置任何屬性,運行結果:
可以看到button被導航欄覆蓋了,只要在viewDidLoad中設置以下self.view的edgesForExtendedLayout屬性就行了,self.edgesForExtendedLayout = UIRectEdgeNone;再運行一下:
二、導航欄(navigationBar)
導航欄的默認字體為黑色,但是如果導航欄背景為深色的話就需要來改動字體的顏色了,這時需要重寫viewController的setTitle方法:
這樣就可以根據需要來設置導航欄的字體、顏色、大小、陰影了。如果在每個界面都這么寫的話會非常麻煩,可以為viewController增加一個類別方法或者用宏定義來實現。
在IOS7下,如果不設置navigationBar的背景圖片,而設置[navigationBar?setBarStyle:UIBarStyleBlackTranslucent];可以獲取默認的黑色毛玻璃效果
三、UITableView 1.分割線的位置iOS7之前tableviewd的分割線默認情況下是居左的,寬度和tableview的寬度一樣,但是在iOS7中,分割線默認向右移動了10幾個像素,如圖:
想要調整為居左顯示,需要設置一下tableview的屬性,??? tableview.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
但是該屬性是在iOS7中才有的,使用時需要判斷一下系統的版本號,否則在iOS7之前的設備上運行會出現錯誤。
2.設置透明色的方法
iOS7之前設置tableview為透明色的時候,只要設置tableview.backgroundColor=[UIColor ClearColor]就行了,但是在iOS7中發現只設置tableview的背景色沒有達到透明的效果,還需要設置cell.backgroundColor = [UIColor ClearColor]才可以。
四、唯一標識符
在iOS6之后,蘋果禁用了禁用了UIDevice的uniqueIdentifier方法,所以獲取設備唯一標識的方法采用了獲取Mac地址然后MD5加密,但是,在iOS7中發現,該方法統一返回02:00:00:00:00:00,所以用做設備的標識符已經沒有意義。經過調研、查閱資料和各種方案對比分析,采用了ADID,以下是ADID的特點及使用方法。
| 提供方 | 蘋果API |
| 用途 | 廣告服務 |
| 系統支持 | iOS6和iOS7 |
| 使用方法 | 1.?????首先在target->Buidl Phases->Link Binary With Libraries中添加AdSupport.framework 2.?????在需要使用的文件里包含ASIdentifierManager.h文件 3.?????調用advertisingIdentifier?實例方法 代碼:NSString?*adId = [[[ASIdentifierManagersharedManager]advertisingIdentifier]UUIDString]; |
| 返回值發生改變的情況 | 1.?????設置->通用->還原->抹掉所有內容和設置 2.?????iOS6:?設置->通用->關于本機->廣告->還原廣告標識符 3.?????iOS7:?設置->隱私->廣告->還原廣告標識符 |
| 返回值不發生改變的情況 | 1.?????設置->通用->還原->還原所有設置 2.?????卸載應用程序后重新安裝 |
五、UIScrollView 在iOS7中scrollview滾動的時候,上下都可以滾動,即使contensize的高度和內容的高度一樣也是如此,設置屬性self.automaticallyAdjustsScrollViewInsets = NO就可以了,具體原因還沒有搞明白。
注:判斷系統版本的宏定義:#define isIos7System [[[UIDevice currentDevice] systemVersion] floatValue] >=?7.0
總結
以上是生活随笔為你收集整理的iOS7适配问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java项目宕机出现原因,java服务宕
- 下一篇: 软件质量控制问题与质量控制技术