適配ios11與iphone x實踐

来源:http://www.cnblogs.com/buerjj/archive/2017/10/11/7652120.html
-Advertisement-
Play Games

一、適配iOS11 問題1:項目中有原生與H5的交互,運行在iOS11時,直接漰潰在框架WebViewJavascriptBridge內部。 報錯信息:Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePol ...


一、適配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:ios11中tableView分組間距變大。

解決:原來組尾間距之前實現了heightForFooterInSection,而沒有實現viewForFooterInSection方法,在ios11之前是沒問題,但現在就都要實現,如果不需要他們之前有間距需要這樣設置

 

問題4:關於tableView或scrollView的在ios11中新增加的contentInsetAdjustmentBehavior屬性問題

解決:看我上一篇博客 http://www.cnblogs.com/buerjj/p/7655090.html

 

問題5:將第三方框架代碼拖入Xcode 9工程中,使用時報錯。例如:gitHub下載最新的masonry源碼,將masonry文件拖入工程中,勾上copy items if needed,選擇create groups,勾上Add to targets。使用masonry代碼如下

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.mas_equalTo(self.view);

}];

然後發現的masonry報錯如下:[UITableView mas_makeConstraints:]: unrecognized selector sent to instance 0x7f9c6f0b7200。

原因:Xcode 9拖入第三方代碼不會將代碼放入工程編譯,拖入masonry文件夾後,點工程 - build phases - compile sources ,會發現這裡沒有masonry相關文件。

解決1:點工程 - build phases - compile sources 點 + 號,將masonry加入編譯。

解決2:不要使用拖入,應點擊工程,右鍵Add Files To

備註:這應該是Xcode 9.0 bug,據說9.1beta版已經修複。看此鏈接:http://blog.csdn.net/thoris/article/details/78139274?locationNum=7&fps=1

  ps: 最近做路徑規劃,在集成高德地圖時拖入第三方代碼時也是因為這個原因報錯。使用同樣的方式都可以解決。親測。

 

 

二、適配iPhone x

問題1:在iPhone x模擬器上有tabBar時,push頁面底部的tabBar會向上跳動一下,然後返回回來後又是tabBar又正常,再push又會跳動。

解決:在攔截所有控制器push的地方加上如下代碼

 

問題2:導航欄高度問題;因為工程中沒有使用系統的導航欄,全是自定義的view,所以在iphone x上,導航欄高度還是64顯然是不對的。

解決:所以加入導航欄的巨集定義,利用[UIApplication sharedApplication].statusBarFrame.size.height + 44就可以動態得到導航欄高度。其他就不用修改了,只需要調整一下高度。還好之前導航欄自定義時內部的佈局封裝得比較好。

 

問題3:底部tabBar變高。

解決:因為使用的是系統tabBar,高度會自動適配,但view中有些佈局如果相對於原來tabBar寫死了49的高度的話,那就不行了,所以根據屏幕高度判斷是否為iPhone X,用巨集定義寫tabBar的高度。這部分巨集定義如下所示:

// 是否是iphoneX

#define     kIsIphoneX      ([UIScreen mainScreen].bounds.size.height == 812 ? YES : NO)

// tabbar高度

#define     kTabBarH        (kIsIphoneX ? 83 : 49)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //除法函數,用來得到精確的除法結果//說明:javascript的除法結果會有誤差,在兩個浮點數相除的時候會比較明顯。這個函數返回較為精確的除法結果。//調用:accDiv(arg1,arg2)//返回值:arg1除以arg2的精確結果function accDiv(arg1,arg2){ var ...
  • 這是我學習nodejs以來做的第一個小例子,很簡單,就是在第一個頁面里輸入自己的名字,在第二個頁面(有圖片)中顯示。思路和很多地方都參考了http://www.cnblogs.com/giggle/p/6287931.html 這篇文章,感謝作者。 這篇文章中說得不對的地方希望大家指正。 ...
  • 一:文件傳輸 在android開發中,有時候需要將文件從pc端傳遞至android,或者將軟體運行的日誌,從android設備傳遞到pc進行分析,我們可以使用windows的cmd視窗,或者android studio的terminal視窗來傳遞文件。 1:連接android設備 此處預設是andr ...
  • Activity的生命周期 1.正常情況下的生命周期 Activity的生命周期切換過程 關於onStart和onResume、onPause和onStop的不同,onStart和onStop是從Activity是否可見這個角度來回調,onResume和onPause是從Activity是否位於前臺 ...
  • 先展示實現的效果圖如下: 此示例展示用的是MVVM結構形式,表述如下 M:數據Model的存儲,可以用來對屬性進行處理。(即胖model概念,上圖中xx萬人訂閱這個處理方法寫在Model內) V: View。用來統一管理控制項初始化與佈局。 VM:viewModel。負責網路請求及其他計算或事件處理 ...
  • 概述 YdbOnline是面向網頁開發者提供的網頁開發工具包。 通過使用YdbOnline,網頁開發者可藉助YdbOnline高效地使用語音、位置等手機系統的能力,同時可以直接使用清除緩存、掃一掃等App特有的能力,為用戶提供更優質的網頁體驗。 此文檔面向網頁開發者介紹YdbOnline如何使用及相 ...
  • ACTION_PACKAGE_ADDED 一個新應用包已經安裝在設備上,數據包括包名(最新安裝的包程式不能接收到這個廣播)ACTION_PACKAGE_REPLACED 一個新版本的應用安裝到設備,替換之前已經存在的版本ACTION_PACKAGE_REMOVED 一個已存在的應用程式包已經從設備上 ...
  • Kotlin 和 Swift, 兩大新寵! 借 ReactNative 熟悉下 kotlin 的用法,不料掉坑裡面了.昨晚花了大半夜,趁這會兒思路清晰,把涉及到的一些關鍵信息,迅速整理下. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...