1. 程式人生 > >有關iOS11和iPhoneX的適配問題

有關iOS11和iPhoneX的適配問題

一:iOS11 問題

有關iOS11 ,最大的變化就是增加了一個安全區域(safeArea)的概念,iOS11 適配的大部分問題都是由於它引起的。 如果還不太瞭解概念,推薦閱讀 iOS 11 安全區域適配總結這篇文章。

1. tableView 頭部檢視和尾部檢視出現一塊留白問題

  • iOS11下tableview預設開啟了self-Sizing,也就是自動估高機制。 有兩種辦法去掉留白:

  • tableView的style:UITableViewStyleGrouped型別,預設tableView開頭和結尾是有間距的,不需要這個間距的話,可以通過實現heightForHeaderInSection方法(返回一個較小值:0.1)和viewForHeaderInSection(返回一個view)來去除頭部的留白,底部同理。

  • iOS 11上發生tableView頂部有留白,原因是程式碼中只實現了heightForHeaderInSection方法,而沒有實現viewForHeaderInSection方法。iOS 11之後應該是由於開啟了估算行高機制引起了bug。新增上viewForHeaderInSection方法後,問題就解決了。或者新增以下程式碼關閉估算行高,問題也得到解決。

  self.tableView.estimatedRowHeight = 0;
  self.tableView.estimatedSectionHeaderHeight = 0;
  self.tableView.estimatedSectionFooterHeight = 0;

2. NavigationBar 的變化

  • 新增了一種lagreTitle的樣式,預設是關閉的,暫時不用管他

  • 集成了 UISearchController,很方便

  • 圖層發生了變化:
    如果設定了titleView,titleView原來是直接新增到UINavigationBar上,iOS11後,titleView會加在
    UITAMICAdaptorView上,UITAMICAdaptorView這個圖層是新增在UINavigationBarContentView上的,
    UINavigationBarContentView之上才是UINavigationBar。

  • titleView支援autolayout,你可能會發現你的titleView變窄了,你可以通過重寫 intrinsicContentSize方法來解決這個問題

  - (CGSize)intrinsicContentSize {
      return UILayoutFittingExpandedSize;
  }

3 .iOS 11 許可權問題

4. iOS11系統下SVProgessHUD預設的loading文字變灰問題

螢幕快照 2017-10-11 上午11.43.46.png
螢幕快照 2017-10-11 上午11.43.46.png

具體原因還未找到,坐等更新,暫時使用了SVP的自定義樣式解決,望有遇到過的大佬不吝指教

  [SVProgressHUD setDefaultStyle:SVProgressHUDStyleCustom];//設定loading樣式,預設白底黑字
  [SVProgressHUD setBackgroundColor:HEXCOLOR(0xf9f9f9ff)]; //設定loading底部背景顏色

二: iPhoneX問題

1. 適配iPhoneX的時候上面流海的螢幕仍是黑色,內容沒有充滿螢幕

  • 這是因為你沒有設定對應大小的啟動圖,iPhone X對應畫素 1125 * 2436,將啟動圖新增到LaunchImage中後,還要在Contents.json檔案中增加下面的內容
{
    "extent" : "full-screen",
    "idiom" : "iphone",
    "subtype" : "2436h",
    "filename" : "你的啟動圖名字.png",
    "minimum-system-version" : "11.0",
    "orientation" : "portrait",
    "scale" : "3x"
}
2.webView,tableView頁面無導航欄時,頂部出現44高度的空白
image.png
image.png

*iOS11中廢棄了automaticallyAdjustsScrollViewInsets,取而代之的是contentInsetAdjustmentBehavior屬性,adjustedContentInset屬性決定了tableView與邊緣的距離。iPhone X豎屏時控制器檢視的safeAreaInsets是(44,0,34,0)

#pragma mark -- 廢棄了的automaticallyAdjustsScrollViewInsets
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED_WITH_REPLACEMENT
("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES

#pragma mark -- UIScrollView新屬性
/* When contentInsetAdjustmentBehavior allows, UIScrollView may incorporate
 its safeAreaInsets into the adjustedContentInset.
 */
@property(nonatomic, readonly) UIEdgeInsets adjustedContentInset API_AVAILABLE(ios(11.0),tvos(11.0));

contentInsetAdjustmentBehavior屬性有以下幾個列舉值:

/*
1. automatic 和scrollableAxes一樣,scrollView會自動計算和適應頂部和底部的內邊距並且在scrollView 不可滾動時,也會設定內邊距.
2. scrollableAxes 自動計算內邊距.
3. never 不計算內邊距
4. always 根據safeAreaInsets 計算內邊距
*/
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {  
    UIScrollViewContentInsetAdjustmentAutomatic, 
    UIScrollViewContentInsetAdjustmentScrollableAxes,
    UIScrollViewContentInsetAdjustmentNever,
    UIScrollViewContentInsetAdjustmentAlways,
}

@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior;
@property(nonatomic, readonly) UIEdgeInsets adjustedContentInset;

//adjustedContentInset值被改變的delegate
- (void)adjustedContentInsetDidChange; 
- (void)scrollViewDidChangeAdjustedContentInset:(UIScrollView *)scrollView;

新增如下程式碼解決問題

if (@available(iOS 11.0, *)) {
    tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
3.iPhoneX 在push進入 webView頁面時,底部會有黑邊一閃而過
  • 這也是由iOS11的safeArea引起的問題。
  • 發生這種情況, 你可能設定了webview 的高度為 SCREEN_HEIGHT-NAVBAR_HEIGHT(螢幕高度-(導航欄高度+狀態列高度)),你有兩種選擇:
    1)設定webview高度為 SCREEN_HEIGHT-NAVBAR_HEIGHT-34, 34為底部的安全區域間距。
    2)新增如下程式碼
if (@available(iOS 11.0, *)) {
    webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}

第一種方法會讓webview的檢視和底部有34的距離,第二種會使webview保持全屏,但一部分割槽域會被iPhoneX底下的黑條遮住,美醜自評

4.頁面底部有固定的footerView被遮擋,以及一些自定義輸入框彈起鍵盤被遮蓋問題

iPhoneX需要將底部一些控制元件的位置往上移34,彈出的鍵盤隱藏時也可能會出現問題,根據實際情況修改。

5.檢視高度問題

以前編寫程式碼的時候,定義tableView高度可能只是用了SCREEN_HEIGHT-64-49(有tabbar的時候),也可能是SCREEN_HEIGHT-64(tabbar隱藏的時候),在iphoneX上面這樣的寫法會出現問題,特別是一些死頁面,tableView會拉不到最底部。

相關推薦

[Cordova] 移動App 的 ios11 iPhoneX

Apple每次退出新尺寸的iphone都會掀起一番適配風波,這次沒有下巴但有劉海的iPhoneX更是如此,網傳橫屏下的適配動畫更是令不少人汗顏。 其實對於Native App來說,適配並不算困難(當然追求酷炫效果另算),官方文件有詳細的說明,而對於Web

有關iOS11iPhoneX問題

一:iOS11 問題 有關iOS11 ,最大的變化就是增加了一個安全區域(safeArea)的概念,iOS11 適配的大部分問題都是由於它引起的。 如果還不太瞭解概念,推薦閱讀 iOS 11 安全區域適配總結這篇文章。 1. tableView 頭部檢視和尾部檢視出現一塊留白問題 iOS11下tablevi

我的iOS11iPhoneX(三)

今天說說在iPhoneX適配碰到的問題: 一、部分頁面頂部超過了iPhoneX的“劉海” 二、部分頁面底部被虛擬home按鍵遮擋。 造成以上問題是: 一、iPhoneX 的狀態列高度產

Xcode9 iOS11 iPhoneX heightForHeaderInSection、contentInset失效解決 contentInsetAdjustmentBehavior詳解

1.iPhoneX基本屬性 啟動圖尺寸:1125px × 2436px(即 375pt × 812pt @3x)) iphoneX 螢幕高:812.0個點 導航欄高度+狀態列高度:88.0個點(導航欄高度仍是44個點,狀態列高度增高為44個點,所以劉海的高度並不是狀

iOS11&iPhoneX&Xcode9打包注意事項

1,適配UITableView 1 2 3 4 5 6 7 if#available(iOS11.0, *) { self.contentInsetAdjustmentBehavior= .never self.estimatedRowHe

xcode7ios9之路

get sans att 新建 技術分享 matching resolve down 二進制 從xcode6.x升級xcode7.2之後,發現要做一堆事情來做適配,不然之前的項目沒法好好執行。 一.換庫 dylib後綴的庫都要換成tbd後綴的。例如以下所看到的

iphoneX!!!

color kit 底部導航 AD width 所在 pan 參數 -s 方法1.js判斷(以下采用Jquery) //適配iphonex if($(window).width() === 375 && $(window).height() === 7

Andriod界面設計的分辨率尺寸全攻略 轉載

復雜 分別是 太差 content 基礎 hdp art 發布 一點 Andriod界面設計的分辨率和尺寸適配全攻略 轉載 2016年09月27日 17:45:56 第一、屏幕尺寸: 一般表示是手機的實際物理尺寸,屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸

表現層響應式:響應式佈局螢幕佈局

1.響應式佈局:     響應式佈局是根據瀏覽器寬度,解析度,橫屏,豎屏等情況來自動改變元素展示的一種佈局方式,一般可以使用柵格方式來實現,一般有兩種思路,一種是桌面端瀏覽器優先,擴充套件到移動端瀏覽器適配,另一種是以移動端優先,擴充套件到桌面瀏覽器適配。由於移動端網路和計算

iOS iPhoneX

1.導航欄高度 88 非非IPoneX手機為64 2.狀態列高度44 非IPoneX手機為20 3.tabar高度83 非IPhoneX手機為49  如下圖所示; 問題:push時tabbar向上移動導致一塊小黑螢幕 簡單描述一下,這就是一個蘋果官方開發人員的一個

apicloud針對iPhoneX問題

1、iPhoneX啟動圖尺寸為1125*2436 若未上傳對應的iPhone X啟動圖或者啟動圖格式不正確,應用執行在iPhone X上面時上下將有大黑邊,不能全屏執行。 2、狀態列高度不再是以前的20px,而是變成了44px,如果應用開啟了沉浸式效果,那麼頁面

移動端(三)—— remflex

之前說過百分比適配、比例縮放適配和viewport適配,但是,現在的主流適配方案是rem適配,它很強大。 4、rem適配 首先說說常用畫素單位: 常用畫素單位 1. px 絕對單位,給多少就是多少, 問題:不管螢幕尺寸怎麼變化,它都不會變。做

引導頁面的蒙版鏤空螢幕

標籤: 引導頁面的蒙版鏤空和螢幕適配,技巧 需求 設計稿樣式實現一個遮罩蒙版引導   實現難點 鏤空濛版實現方案 箭頭圖片的大小和位置的螢幕適配 實現方案 鏤空濛版實現 方案一:切圖,直接使用鏤空的圖片去實現效果 缺陷:圖片的寬高是固定的,唯有

iOS之旅--iOS11的一些工作

跳轉App Store評論 - (void)gotoAppStoreEvaluate { //1028355284是我們APP的appID,替換成你的應用的appID即可 NSStri

Android常見解析度(mdpi、hdpi 、xhdpi、xxhdpi )尺寸單位轉換螢幕相關

一:Android 螢幕適配 眾所周知,Android機型尺寸各種各樣,於是螢幕適配就成了Android開發中很重要的一環。Android螢幕適配可能一些開發者都會遇到這樣的問題,今天就來分享下螢幕適配,其實Android螢幕適配也可以很簡單。 基本概念 Android螢幕適配必須要理解的一些概念:

Android 7.0 拍照,相簿選擇系統圖片裁剪刪除

Android 7.0 引入了 Provider 給 app 申請檔案儲存路徑,所以需要配置 Provider ,才可以使用 儲存功能。 定義 provider 在 res/xml 資料夾下定義

最全面簡單螢幕工具AutoLayout的使用教程!

萬能介面卡,AutoLayout使用! 前言:每當我們寫好程式碼,除錯佈局會發現,每款手機顯示的佈局效果有時候不盡人意,這是因為我們在寫程式碼時,只針對了除錯機型螢幕做了設計,而沒有考慮到每個手機適配的問題,雖然大家都知道使用dp,但是並沒能完全解決問題,而且在美工小夥伴

Android開發中的機型國際化的實現;

關於Android螢幕的一些基本概念知識,自行充電。。在此只介紹實際開發過程中的使用   1、說到Android的螢幕適配,首當其衝的就是圖片的適配     圖片適配遵循兩個原則: ①儘量使用9.path圖來自動適應螢幕 ②儘量使用最少的圖片資源     關於第一點使用9.path圖片:比如topBar、底

作業系統: 最佳演算法鄰近演算法的模擬實現(記憶體分配演算法)

實現動態分割槽的分配演算法。 (1) 最佳適配演算法:選擇記憶體空閒塊中最適合程序大小的塊分配。 (2) 鄰近適配演算法:從上一次分配的地址開始查詢符合要求的塊,所查詢到的第一個滿足要求的空閒塊就分配給程序。 模擬新增程序的時候,假定記憶體是一塊完整的空閒區,對於演算法(1

對於iphone X 相容性處理的css方法js方法

1. 如果想全屏覆蓋,html裡面請使用 <meta name="viewport" content="width=device-width,initial-scale=1,viewport-