iOS 11 適配看這篇還不夠?
導航
iOS 11 中導航主要問題是,使自定義返回按鈕點選區域變小了,導致使用者體驗很不好。主要有兩種方法:
- 方法一:使用 Frame 佈局
iOS 11 以前,imageView 的 Frame 可以是CGRectZero
,這樣它的點選區域也很大,而 iOS 11 必須設定一個 Frame。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 30)];
imageView.userInteractionEnabled = YES;
imageView.contentMode = UIViewContentModeLeft;
imageView.image = image;
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
- 方法二: 使用自動佈局,當然這種方式 iOS8 以上才行,
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.userInteractionEnabled = YES;
imageView.contentMode = UIViewContentModeLeft;
imageView.image = image;
if ([imageView respondsToSelector:@selector(widthAnchor)]) {
NSLayoutConstraint *widthConstraint = [imageView.widthAnchor constraintEqualToConstant:80];
// Swift widthConstraint.isActive = YES;
widthConstraint.active = YES;
}
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
automaticallyAdjustsScrollViewInsets 屬性
iOS 11 後 UIViewController 的屬性 automaticallyAdjustsScrollViewInsets,變為了 UIScrollView's contentInsetAdjustmentBehavior。如果發現介面無意中位置偏移了,很可能是這個屬性導致的。
if (@available(iOS 11.0, *)) {
self.collectionView.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
MJRefresh
出現的問題,看這個
applicationDidEnterBackground 不執行
APP 進入後臺後,applicationDidEnterBackground: 這個方法將延遲大約 1000 毫秒執行, 那麼如果在進入後臺時做一些任務,可能會達不到預期的效果。如果 APP 剛進入應用立即啟動,applicationDidEnterBackground: 和 applicationWillEnterForeground: 這兩個方法都不會呼叫。如果有這麼一個場景,進入後臺後給應用設定手勢密碼,當 APP 剛進入後就立即啟動,那麼 applicationDidEnterBackground:這個方法不會立即執行,從而手勢密碼也就不會設定。
裝置名稱
如果你的專案中有有關裝置名的顯示,比如 來自 iPhone X
,那麼你需要適配下新裝置:
@"iPhone10,1" : @"iPhone 8",
@"iPhone10,4" : @"iPhone 8",
@"iPhone10,2" : @"iPhone 8 Plus",
@"iPhone10,5" : @"iPhone 8 Plus",
@"iPhone10,3" : @"iPhone X",
@"iPhone10,6" : @"iPhone X",
UIImagePickerController 設定導航背景圖
[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg"] forBarMetrics:UIBarMetricsDefault];
這樣設定發現對 UIImagePickerController
不起作用,需要使用:
self.navigationBar.barTintColor = [UIColor blackColor];
WebViewJavascriptBridge crash
如何你專案中使用 WebViewJavascriptBridge 與 H5 互動,那麼這裡有一個 crash。
提交 AppStore
提交 AppStore 時需要 1024*1024 Logo,別好不容易打包好了,發現還需要一個 Logo,重新打包有點不值的。
iPhone X
- iPhone X 的狀態列由原來的 20 變為了 44。這個如果在導航的位置設定自定義的 View,在 iPhone X 上出問題。會擋住 View 的顯示。
[UIApplication sharedApplication].statusBarFrame
{{0, 0}, {375, 44}}
- 啟動頁,如果使用
LaunchScreen.storyboard
作為啟動頁,需要調整下 Top 的約束,以前為 -20 ,改為 -44 ;
如果不是採用 LaunchScreen.storyboard
這種方式作為啟動頁,可以 看這篇
- 關於距離狀態列的高度在 iPhone X 有可能被擋住,需要留意一下;
螢幕尺寸變化
- {375, 812} iPhone X
- {375, 667} iPhone 8 / iPhone 7 / iPhone 6
- {414, 736} iPhone 8P / iPhone 7P / iPhone 6P
- {320, 568} iPhone SE / iPhone 5
參考
===== 我是有底線的 ======
喜歡我的文章,歡迎關注我的新浪微博 Lefe_x,我會不定期的分享一些開發技巧
相關文章
- iOS 11適配iOS
- Vue專案主題色適配,看這一篇文章就夠了Vue
- iOS11 適配iOS
- iOS 11 適配的坑iOS
- mongoDB看這篇就夠了MongoDB
- iOS11適配詳解iOS
- iPhone X + iOS 11 適配指南iPhoneiOS
- iOS 11 & iPhoneX 適配iOSiPhone
- iOS應用之間的跳轉,看這篇就夠了iOS
- Oracle索引,看這篇就夠了Oracle索引
- 適配iPhoneX & iOS11iPhoneiOS
- iOS版本相容以及部分iOS 11適配iOS
- iOS 動畫詳解(學習動畫看這一篇就夠了)iOS動畫
- iOS-Charts看這個就夠了iOS
- 第九篇:swift4.0、iPhone X、iOS 11的適配工作SwiftiPhoneiOS
- 入門Webpack,看這篇就夠了Web
- Android Fragment看這篇就夠了AndroidFragment
- OAuth授權|看這篇就夠了OAuth
- Zookeeper入門看這篇就夠了
- Git 看這一篇就夠了Git
- React入門看這篇就夠了React
- JavaScript正則,看這篇就夠了JavaScript
- PyCharm 使用教程看這篇就足夠PyCharm
- 小程式分享,看這篇就夠了
- iOS11適配遇到的問題iOS
- 適配iOS11--contentInsetAdjustmentBehavioriOS
- 《iOS 11 安全區域適配總結》iOS
- 10分鐘適配 iOS 11 & iPhone XiOSiPhone
- ios11 劉海屏 安全區域 適配 彈框區域適配iOS
- iOS MJRefresh適配ios11以及iPhoneXiOSiPhone
- Flutter DataTable 看這一篇就夠了Flutter
- 小程式入門看這篇就夠了
- Java 動態代理,看這篇就夠了Java
- vue 元件通訊看這篇就夠了Vue元件
- 想安裝PostgreSQL,看這篇也就夠了SQL
- java序列化,看這篇就夠了Java
- 代理模式看這一篇就夠了模式
- EFCore 6.0入門看這篇就夠了