iOS 11 的第三篇~~~objective-c
iPhone X 發佈了。全面屏,Face ID,劉海。扎心了~。就是買不起,腎不夠用了。swift
言歸正傳,這篇說一些亂七雜八的更新小點吧~~~windows
啓動圖尺寸多了 iPhone X 的尺寸。app
Portrait dimensions | Landscape dimensions |
---|---|
1125px × 2436px (375pt × 812pt @3x) | 2436px × 1125px (812pt × 375pt @3x) |
只要把準確的啓動圖放進去,那麼在 iPhone X 上就會自動適配了。當時只須要看哪些 UI 出問題須要修改。ide
若是是用LaunchScreen.storyboard
的話,基本不用更改就適配了。字體
iPhone X 上的 navigationBar 和 tabBar 的高度有了變化~~動畫
iPhone X | no iPhone X | |
---|---|---|
navigationBar | 44 + 44 = 88 | 20 + 44 = 60 |
tabBar | 83 | 49 |
獲取statusBar
的一些狀態,好比電池啊什麼的,會用到這樣一句代碼ui
NSArray *infoArray = [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
這代碼在 iPhone X 會形成閃退。緣由是 iPhone X 沒有這個foregroundView
。spa
iPhone X 的高度是 812 ,因此能夠經過這個高度直接判斷是否是 iPhone X。設計
Swift 版本
func iPhoneX() -> Bool { let size = UIScreen.main.bounds.size // 防止 屏幕 翻轉~~ let maxHeight = max(size.width, size.height) return maxHeight == 812 }
Objective-C 版本
- (BOOL)iPhoneX { CGSize size = [UIScreen mainScreen].bounds.size; CGFloat maxHeight = MAX(size.width, size.height); return maxHeight == 812; }
iOS 11 的 UI 設計有個特色,更加註重內容吧。因此字體加粗的加粗,變大的變大。總以爲 app store 能夠說是此次 iOS 11 設計的一個典型例子~。其中,LargeTitle
的出現,也至關因而
開啓這個屬性很簡單。
navigationController?.navigationBar.prefersLargeTitles = true
還能夠利用富文本能夠更改一些屬性等。
navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.orange]
但一些viewController
不須要的時候,能夠經過如下代碼進行關閉。那麼就能夠和原先的同樣了。
viewController.navigationItem.largeTitleDisplayMode = .never
另外,能夠對 searchBar 進行一些滑動隱藏
navigationItem.hidesSearchBarWhenScrolling = true
UITableViewCell
左右滑動出現了按鈕,多了一些動畫效果。另外,代理方法也變化了。
@available(iOS 11.0, *) override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let action = UIContextualAction(style: .normal, title: "leading") { (action, view, completionHandler) in completionHandler(true) } action.backgroundColor = .blue return UISwipeActionsConfiguration(actions: [action]) } @available(iOS 11.0, *) override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let action = UIContextualAction(style: .normal, title: "trailing") { (action, view, completionHandler) in completionHandler(true) } action.backgroundColor = .red return UISwipeActionsConfiguration(actions: [action]) }
另外,iOS 11 上的 UITableView 默認就是開啓自動行高的。即——
tableView.rowHeight = UITableViewAutomaticDimension
對此,須要對其加上一個 估算行高 。
tableView.estimatedRowHeight = 你估算的高度
若是要關閉這個自動行高,只須要把estimatedRowHeight
設置爲 0 。
對於自動行高,有一點須要記住的,若是 cell 使用
Swift 一直都有的 iOS 版本判斷 if #available(iOS 11.0, *) {}
。終於在 Xcode 9 中,Objective-C 也能夠用了。
if (@available(iOS 11.0, *)) { // 啪啪啪 }
iOS 11 以前,用automaticallyAdjustsScrollViewInsets
來管理UIScrollView
的 subView 的偏移,可是 iOS 11 開始,這屬性被廢棄。改爲contentInsetAdjustmentBehavior
了。
if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; // 若是須要計算內邊距,那麼就是 self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic; } else { self.automaticallyAdjustsScrollViewInsets = NO; }
iOS 11 強推了 使用 app 期間才定位 的權限。須要在 info.plist 文件中添加
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>你的權限使用說明</string>
或者是 ——
最後那個是新增的~~
對噠。Xcode 能夠開啓多個 模擬器 跑工程。內牛滿面啊。有木有~
前去 windows - device and simulators 。
File - Project Setting / workspace setting
build system 選擇 new build system 便可。
該模塊是用 Swift 重寫。