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 。。。

图片描述

相关文章
相关标签/搜索