放大镜下的iOS 13

动态类型很好,但并非总是有效。 现在,我将告诉您iOS 13中的小型控件如何免费增加,而无需注册和SMS。


上一篇文章中,我们在Dodo Pizza iOS应用程序的菜单上拉出了dynamik类型。 结果很好。 但是菜单下的标签栏很小,不会随文字大小设置而变化。


此功能尚未发布,对此我感到羞愧和羞愧

“但是怎么样,渡渡鸟?” 您不关心视障人士吗?
-对不起!

关于内置模式“放大镜”的一些知识


系统标签栏长按可显示每个标签的预览。 尝试包括“可用”文本大小,然后长按系统选项卡中的任何选项卡(例如,在“音乐”或“照片”中)。 屏幕上将显示以下弹出窗口:


除了标签栏之外,导航栏和工具栏中的按钮还支持“放大镜”模式:


搜索字段:


还有更多控件。

而且,从iOS 13开始,我们可以轻松地向控件添加相同的行为。

如何将UILargeContentViewerItem固定到应用程序


不幸的是,该协议在文档中很少描述,但这没关系,因为它的API看起来很简单:

@available(iOS 13.0, *) public protocol UILargeContentViewerItem : NSObjectProtocol { var showsLargeContentViewer: Bool { get } var largeContentTitle: String? { get } var largeContentImage: UIImage? { get } var scalesLargeContentImage: Bool { get } var largeContentImageInsets: UIEdgeInsets { get } } 

只需实现其中的几种方法,这些方法的名称就可以说明一切,并且您的控件将在长时间显示时显示大的预览。

实施非常简单


让我们在应用程序的某些按钮上尝试使用此协议。 例如,在产品卡的i按钮上:


添加3行代码:

 nutritionButton.showsLargeContentViewer = true nutritionButton.addInteraction(UILargeContentViewerInteraction()) nutritionButton.largeContentTitle = nutritionButton.accessibilityValue 


做完了 酷吧?

我不喜欢,这是默认情况下拉到的偶数图标。 如果它不是两种颜色,而是一种颜色,且字母i形状为切角,那会更好。 这仅用于.highlighted按钮状态。

 nutritionButton.largeContentImage = nutritionButton.image(for: .highlighted) 


规范

现在让我们结束扩展:

 extension UIView { public func enableLargeContent(title: String? = nil, image: UIImage? = nil, scales: Bool = true, insets: UIEdgeInsets = .zero) { guard !showsLargeContentViewer else { return } showsLargeContentViewer = true addInteraction(UILargeContentViewerInteraction()) largeContentTitle = title largeContentImage = image scalesLargeContentImage = scales largeContentImageInsets = insets } } 

 nutritionButton.enableLargeContent(title: nutritionButton.accessibilityValue, image: nutritionButton.image(for: .highlighted)) 

实际上,许多标准ios控件已经实现了此协议的某些方法。 并且此模式已关闭,因为您需要尝试真正增加内容,而不是将所有内容都隐藏在放大镜后面。

我再说一遍:当您根本无法增加控制权时,只能将此功能用作最后的手段。
如果您打开UILargeContentViewerItem接口,则可以在Xcode中找到有关整个过程的文档。


在GitHub上的仓库中的演示项目

Source: https://habr.com/ru/post/zh-CN463151/


All Articles