iOS 11 的一些玩意儿:Dynamic Type

2023-12-25 15:59
文章标签 dynamic ios type 玩意儿

本文主要是介绍iOS 11 的一些玩意儿:Dynamic Type,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

iOS 11 的第二篇~~~

当用户在更改手机设置里的字体大小时,App 里面的字体也跟着进行大小变化。这大概就是Dynamic Type吧。UI上的显示,用户的体验,这些都更加友好吧。

iOS 11 更新的Dynamic Type,主要是UIFontMetrics这个玩意儿。比方说UILabel,在使用的时候,需要设置adjustsFontForContentSizeCategory = true,这样能确保 UI 在用户在设置-显示里面更改字体大小的时候,App 里的 UI 字体大小也会随着变化。其实,在 iOS 10 的时候,这个属性就己经放出来了。模拟器里面是没有这个选项的话,需要到设置里面, General - Accessibility - Larger Text ,这里进行一个更改字体大小。

Dynamic Type对字体有一定的要求。以往我们都是使用——

func systemFont(ofSize fontSize: CGFloat) -> UIFont

进行一个字体设置,或者是使用自定义字体——

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

但是,如果要使用adjustsFontForContentSizeCategory,那么以上这两个熟悉的方法就不能使用了。对于这个, 爸爸对字体进行了规定。有点类似多级标题,正文啊那些。上下 WWDC keynote 的那张图。清楚的表明了对应的字体大小。

图片描述

使用Storyboard或者xib进行布局的时候,都比较简单。只需要在对应位置更改就行。把Font给成bodytitle等这些对应的字体,再者就是把automatically adjusts font给钩上。

图片描述

至于代码实现呢,在 iOS 10 ,是这样的。

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

图片描述

这篇关于iOS 11 的一些玩意儿:Dynamic Type的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536078

相关文章

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

C# dynamic类型使用详解

《C#dynamic类型使用详解》C#中的dynamic类型允许在运行时确定对象的类型和成员,跳过编译时类型检查,适用于处理未知类型的对象或与动态语言互操作,dynamic支持动态成员解析、添加和删... 目录简介dynamic 的定义dynamic 的使用动态类型赋值访问成员动态方法调用dynamic 的

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

水凝胶光子学是啥玩意儿?能用来干啥?

大家好,今天我们来了解一篇关于水凝胶光子学的文章——《Engineering hydrogel-based biomedical photonics: design, fabrication and applications》发表于《Advanced Materials》。水凝胶在生物医学领域应用广泛,近年来在光子学方面的研究取得了重要进展。该文章详细介绍了水凝胶光子学的设计、制

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity