適配ios11與iphone x實踐
一、適配iOS11
問題1:項目中有原生與H5的交互,運行在iOS11時,直接漰潰在框架WebViewJavascriptBridge內部。
報錯信息:Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once
解決:當時第一時間肯定是立即看github上該框架的issue,果然找到了解決方案。該issue鏈接:https://github.com/marcuswestin/WebViewJavascriptBridge/issues/302,詳情如下圖
按照上述提供的解決方案修改就好了,下圖是修改前與修改後對比 ( 左圖修改前,右圖修改後 )
問題2:用戶首次安裝時, 定位權限框不彈出?
解決:原來在ios 11內權限的請求被降級了,因為之前工程內首次請求定位權限使用的方法為requestAlwaysAuthorization,但在ios11內要使用requestWhenInUseAuthorizationf
問題3:tableView,scrollView,WkWebView等顯示內容出現向下偏移。由於app首面就用了一個類似支付寶首頁的滑動交互,scrollView上套了一個tableView,所以連滑動的效果也都一起出了問題。
解決:通過網上查找信息,發現ios11內scrollView多了一個contentInsetAdjustmentBehavior屬性(默認UIScrollViewContentInsetAdjustmentAutomatic),在系統導航欄下,默認向下產生了偏移。因為工程內自己創建的tableView,scrollView,WKWebView都分別繼承匪類xxbaseTableView, xxbaseScrollView, xxbaseWKWebView, 所以修改直接就在它們初始化時加下如下代碼
對xxbaseWKWebView則是self.scrollView.contentInsetAdjustmentBehavior
修改好後,經測試,那些不正常的頁面確實正常了。之前在網上看到有人解決方案是在appdelegate裏
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
[UITableView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
這樣確實可以解決這個問題,但是在調用出系統相冊的地方,會導致系統相冊頁面的tableView自動向上移,即這個屬性會影響到一些系統控制器內的UIScrollView,UITableView的偏移,所以不太建議使用這種方案。
問題4:ios11中tableView分組間距變大。
解決:原來組尾間距之前實現了heightForFooterInSection,而沒有實現viewForFooterInSection方法,在ios11之前是沒問題,但現在就都要實現,如果不需要他們之前有間距需要這樣設置
二、適配iPhone x
問題1:在iPhone x模擬器上有tabBar時,push頁面底部的tabBar會向上跳動一下,然後返回回來後又是tabBar又正常,再push又會跳動。
解決:在攔截所有控制器push的地方加上如下代碼
問題2:關於iPhone x導航欄和底部TabBar高度及安全區的適配。如果不適配最直觀現象就是iPhone x頁面被輔滿,顯示內容被頂部劉海和底部home指示器擋住。
解決:
a 關於導航欄:因為工程內沒有用到系統的導航條,是完全自定義的一個view,所以iPhone x上只要將它的高度由64變高到
—————— 未完待續 ——————
適配ios11與iphone x實踐