iOS 11 的一些玩意兒: 亂七雜八

iOS 11 的第三篇~~~objective-c

iPhone X 發佈了。全面屏,Face ID,劉海。扎心了~。就是買不起,腎不夠用了。swift

言歸正傳,這篇說一些亂七雜八的更新小點吧~~~windows

iPhone X

啓動圖

啓動圖尺寸多了 iPhone X 的尺寸。app

Portrait dimensions Landscape dimensions
1125px × 2436px (375pt × 812pt @3x) 2436px × 1125px (812pt × 375pt @3x)

只要把準確的啓動圖放進去,那麼在 iPhone X 上就會自動適配了。當時只須要看哪些 UI 出問題須要修改。ide

若是是用LaunchScreen.storyboard的話,基本不用更改就適配了。字體

兩個 Bar 的高度

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 沒有這個foregroundViewspa

判斷是否 iPhone X

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;
}

LargeTitle

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

UITableView

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 使用

  1. Auto Layout,須要保證 cell 的 subViews 約束正確
  2. Frame Layout,須要重寫 sizeThatFit: 這個方法

版本判斷

Swift 一直都有的 iOS 版本判斷 if #available(iOS 11.0, *) {}。終於在 Xcode 9 中,Objective-C 也能夠用了。

if (@available(iOS 11.0, *)) {
    // 啪啪啪
}

automaticallyAdjustsScrollViewInsets

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

多個模擬器

對噠。Xcode 能夠開啓多個 模擬器 跑工程。內牛滿面啊。有木有~

無線 Debug

前去 windows - device and simulators 。

圖片描述

New Build System

File - Project Setting / workspace setting

圖片描述

build system 選擇 new build system 便可。

該模塊是用 Swift 重寫。

相關文章
相關標籤/搜索