动态类型很好,但并非总是有效。 现在,我将告诉您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上的仓库中的演示项目