一、iPhone X尺寸問題html
分辨率1125*2436 (375*812)ios
導航欄爲 44+44 原來爲20+44git
底部tabbar 49+34 其他屏幕 49+0github
二、打印線程問題xcode
Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation]
PID: 49130, TID: 336237, Thread name: (none), Queue name: WriteLogQueue, QoS: 0緩存
形成緣由是由於本來 須要在主線程執行的代碼 被放在了子線程裏邊安全
解決方法:在scheme 裏邊取消主線程檢測 (以下圖 不建議使用) 或者修改代碼 把出問題的代碼放在主線程裏邊便可 我這裏目前發現了shareSDK 內部有狀態欄設置在子線程 出現打印問題app
3 、automaticallyAdjustsScrollViewInsets 在ios11 系統下須要使用contentInsetAdjustmentBehavior 代替 不然會出現問題 須要注意iphone
UIScrollViewContentInsetAdjustmentBehavior 是一個枚舉類型,值有如下幾種:佈局
-automatic 和scrollableAxes同樣,scrollView會自動計算和適應頂部和底部的內邊距而且在scrollView 不可滾動時,也會設置內邊距.
-scrollableAxes 自動計算內邊距.
-never不計算內邊距
-always 根據safeAreaInsets 計算內邊距
很顯然,咱們這裏要設置爲 never
四、判斷ios11 系統的宏這樣寫 判斷時候就不會報警告
#define IOS11 @available(iOS 11.0, *)
//下邊的這種寫法會報警高很煩
#define IOS11 ([[UIDevice currentDevice].systemVersion intValue] >= 11 ? YES : NO)
//判斷是iPhoneX 的宏
#define is_iPhoneX [UIScreen mainScreen].bounds.size.width == 375.0f && [UIScreen mainScreen].bounds.size.height == 812.0f
if (IOS11) { [self.myScrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentAutomatic]; } else { // Fallback on earlier versions self.automaticallyAdjustsScrollViewInsets = YES; }
五、在iPhone X 裏邊在隱藏 導航欄時候 導航欄上邊 24 的白邊 以下圖
解決方法
1>最簡單最粗暴就是每一個頁面都拉線從新約束 判斷是不是iphoneX 更換約束
2>通過查資料 發如今ios11 以後引入了安全域的概念 (安全域的概念自行查文檔或者google)
因此就有了如下方法
從新設置tableView/scrollView的contentInset值,來抵消掉SafeAreaInset值,
由於內容下移偏移量 = contentInset + SafeAreaInset;
SafeAreaInset 是隻讀屬性 沒法修改因此能夠經過修改contentInset 來重設 安全域的大小
固然這個屬性仍是須要的 設置爲never 時候 安全域默認從nav下邊計算。
在沒有nav 狀況下 安全域從 狀態欄下邊開始計算
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
而後若是是iPhone X 的狀況下 設置
scrollView.contentInset = UIEdgeInsetsMake(-44, 0, 0, 0);(我項目由於要取消狀態欄影響 因此約束設置的爲-20 因此這裏的安全區域偏移 更改成-24 便可 根據本身實際狀況設置)
而後設置
self.tableView.clipsToBounds =NO;(不設置的話 若是設置的是透明導航 會出現被遮擋的狀況)
以上代碼便可解決透明導航 在iPhone X 出現白色狀態欄遮擋的問題
六、navigationbar上設置searchbar爲titleView,發現導航變高了。。。而後返回到上個界面,UI佈局就變了
解決方法:
將searchbar 放入一個view 裏邊使用view 來限制searchbar 的大小 而後再把view 給navigationbar的titleView
七、ios11默認是開啓Self-Sizing,
若是目前項目中沒有使用estimateRowHeight屬性,tableView是使用estimateRowHeight屬性的,這樣就會形成contentSize和contentOffset值的變化,
若是是有動畫是觀察這兩個屬性的變化進行的,就會形成動畫的異常,由於在估算行高機制下,contentSize的值是一點點地變化更新的,全部cell顯示完後纔是最終的contentSize值。由於不會緩存正確的行高,tableView reloadData的時候,會從新計算contentSize,就有可能會引發contentOffset的變化。
iOS11下不想使用Self-Sizing的話,能夠經過如下方式關閉:
tableView.estimatedRowHeight = 0
tableView.estimatedSectionFooterHeight = 0
tableView.estimatedSectionHeaderHeight = 0
iOS11下,若是沒有設置estimateRowHeight的值,也沒有設置rowHeight的值,那contentSize計算初始值是 44 * cell的個數,以下圖:
八、對於大量頁面須要設置 contentInsetAdjustmentBehavior屬性 僅需在appdelegate 裏邊設置就可 全局適配
以前項目中相機功能一直使用系統自帶的PickerView,說實話不甚美觀,本身空閒之餘一直着手開發自定義相機(EVNCamera:給個StarO(∩_∩)O~)。在Xcode9的首個Beta版本中開發相機功能時發現,原有項目居然crash,
後來發現iOS11下,蘋果對相冊的權限key作了調整,原來
若是將圖片保存到系統相冊,iOS11以後,新增NSPhotoLibraryAddUsageDescription(Xcode9如下打包APP不須要考慮這些),須要在本身的plist文件中添加這個權限配置。
10 NFC權限
在iOS11中,蘋果開放了NFC(Near field communication),怕也是其推廣ApplePay的一種策略。
在使用近場通信時,首先也要在info.plist配置NFCReaderUsageDescription 權限,案例步驟,以下:
號外:xcode9 的一些問題能夠參考這個帖子