蘋果系統升級后好多應用都發了新版本來適配,今天就來分享一下我的適配歷程。
首先是出現的問題:
1.push一個控制器,返回按鈕和標題神奇的消失了,打開三維視圖(比較坑的是有的版本老到打不開三維視圖 ),發現返回按鈕和標題並沒有消失,而是被一層視圖擋到了。
2.有文本輸入的地方,在iOS10中文本框也消失了,導致無法輸入內容。
3.權限問題。
其次是解決思路:
1.頂層被莫名其妙的加了一層視圖,感覺是自定義的導航欄的背景視圖的層次出問題了,所以查看了自定義的導航欄,但是並沒有,后來問了問,有一個應急的解決辦法,就是給導航欄設置背景色,顏色取背景圖片的顏色,在每一個用到該導航欄的試圖控制器的viewWillAppear方法中重新設置一下導航欄,在viewWillDisappear里也重新設置一下。
但是上面的方法僅適用於導航欄顏色為純色,,所以為了更靈活,還有另一種方法,就是在viewWillAppear和viewWillDisappear方法里先將視圖控制器的導航欄隱藏然后再顯示
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:NO]; [self.navigationController setNavigationBarHidden:NO animated:NO]; } -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:YES animated:NO]; [self.navigationController setNavigationBarHidden:NO animated:NO]; }
第一次看到上面的代碼時,我也跟你一樣感到詫異,可是神奇的是它確實奏效了。
為什么呢?簡書的一位作者寫過類似的博客,里面提到的原因是“iOS10在加載導航欄是總會加載系統的”。如果他說得對的話,也就是說push時系統會將自帶的導航欄置頂,而隱藏后再顯示只會顯示自定義的導航欄。
可是問題又來了,如果每一個視圖控制器都加了上面的代碼也是有問題的,問題是如果某視圖控制器不需要繼續push,那么該視圖控制器會不能很好地適配iOS10,有時會返回到修改前的狀態。解決方法是在進入該視圖時判斷是否需要跳轉,如果需要繼續跳轉,則加上上面的代碼,否則屏蔽掉。
2.此處現在已知的方法是重新建立xib文件。
3.iOS10 中某些權限是必須要加的
(參考:http://blog.csdn.net/wang631106979/article/details/52578001),
例如程序要拍照:Privacy - Camera Usage Description,
麥克風:Privacy - Microphone Usage Description,
定 位:Privacy - Location When In Use Usage Description,
日 歷:Privacy - Calendars Usage Description
******
后面的內容與標題無關 推廣下個人開發的APP 覺得還不錯的 自己自己偷偷用就行了