iOS 11 的一些玩意兒:Dynamic Type

iOS 11 的第二篇~~~html

當用戶在更改手機設置裏的字體大小時,App 裏面的字體也跟着進行大小變化。這大概就是Dynamic Type吧。UI上的顯示,用戶的體驗,這些都更加友好吧。swift

iOS 11 更新的Dynamic Type,主要是UIFontMetrics這個玩意兒。比方說UILabel,在使用的時候,須要設置adjustsFontForContentSizeCategory = true,這樣能確保 UI 在用戶在設置-顯示裏面更改字體大小的時候,App 裏的 UI 字體大小也會隨着變化。其實,在 iOS 10 的時候,這個屬性就己經放出來了。模擬器裏面是沒有這個選項的話,須要到設置裏面, General - Accessibility - Larger Text ,這裏進行一個更改字體大小。app

Dynamic Type對字體有必定的要求。以往咱們都是使用——佈局

func systemFont(ofSize fontSize: CGFloat) -> UIFont字體

進行一個字體設置,或者是使用自定義字體——spa

init?(name fontName: String, size fontSize: CGFloat)code

可是,若是要使用adjustsFontForContentSizeCategory,那麼以上這兩個熟悉的方法就不能使用了。對於這個, 爸爸對字體進行了規定。有點相似多級標題,正文啊那些。上下 WWDC keynote 的那張圖。清楚的代表了對應的字體大小。htm

圖片描述

使用Storyboard或者xib進行佈局的時候,都比較簡單。只須要在對應位置更改就行。把Font給成bodytitle等這些對應的字體,再者就是把automatically adjusts font給鉤上。圖片

圖片描述

至於代碼實現呢,在 iOS 10 ,是這樣的。it

label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true

以上這兩個實現都是 iOS 10 就己經支持的了。可是,有個弊端,就是沒法對自定義字體進行支持。因而,iOS 11 帶來更強大的UIFontMetrics

UIFontMetrics的使用也比較簡單。

let customFont = UIFont.systemFont(ofSize: 20)
label.font = UIFontMetrics.default.scaledFont(for: customFont)
label.adjustsFontForContentSizeCategory = true

固然,UIFontMetrics的使用還不止這些。包括能夠限制最大字號等。

另外,網頁也可使用,可是隻限制於  設備。在CSS中的font,選擇-apple-system-title1-apple-system-body等。不過若是要在非  設備上使用的話,你能夠須要備用字體什麼鬼的吧。上個?。

<body>
    <label style="font: -apple-system-title1">label use apple system title1</label>
    <br><br><br>
    <label> label no use apple system font</label>
</body>

除了字體方面的變化,WWDC還提到了一些隨着字體變化,UI 的變化,須要更改。好比 label 顯示應該進行換行,而不是一行,而後後續...表示。這樣的極爲不美觀的。另外,必要時還須要更改一些 UI 的 位置、約束等。UITableView則建議使用自動行高。

對此, 提供了相應的方法判斷。不過這方法iOS 7就支持了~

if UIApplication.shared.preferredContentSizeCategory > .accessibilityExtraExtraLarge {
    // 更改一些對應的UI。。吧啦吧啦
} else {
    // 更改一些對應的UI。。吧啦吧啦
}

WWDC 也提到了圖片可使用Dynamic Type,用於UIImageView上。只須要把圖片用PDF格式放進assets裏面。另外,將圖片格式致於1x,或者是右側的scaleindividual scales改爲single scales。選擇Preserve Vector Data

看圖~~

圖片描述

類型UILabelUIImageView也須要設置下。

imageView.adjustsImageSizeForAccessibilityContentSizeCategory = true

IB 黨的話,則是

圖片描述

以往tabBar都是麼有變化的。使用Dynamic Type後,長按tabBarItem會出現一個彈窗。如圖。

圖片描述

能夠經過如下代碼設置

guard let firstTabBarItem = tabBar.items?.first else { return }
firstTabBarItem.largeContentSizeImage = 圖片

或者是

圖片描述

BarItem除了使用PDF格式的圖片外,也可使用75p * 75p大小的png等。

Dynamic Type大體就這些內容。我的以爲侷限性有點大吧。若是碰上覆雜的 UI 。。。

圖片描述

相關文章
相關標籤/搜索