如何在 UITextView 中复制 GitHub 的应用程序代码块样式?

How can I replicate GitHub's app code block style in UITextView?

我尝试创建一个降价编辑器是为了好玩,因为我对学习 TextKit 很感兴趣。我只在 iOS 设备上工作,所以我只有 UIKit 框架可供我使用,我还看了这个 WWDC18 video,它解释了 TextKit 采用的一些最佳实践。起初我真的很想知道如何获得与视频在 22:13.

上显示的结果相同的结果

开发人员在视频中显示的代码使用了 AppKit 并通过用 NSMutableParagraphStyle 替换代码部分并提供自定义 NSTextBlock 将代码包装在该矩形中] 到后者。您可以猜到,我不能在 UIKit 中子类化 NSTextBlock,因此我不能复制所示的示例。

虽然我有点难问,但我真正想复制的是 GitHub 应用程序代码块样式,这是我想复制的最终结果:

如您所见,它应该有一个带有自定义背景颜色的圆角矩形,并且它还需要可滚动以使代码根据需要展开(我对语法高亮不感兴趣)。

如果 NSTextBlockUIKit 中不可用,我怎样才能实现这样的目标?

目前我所做的只是覆盖 NSTextStorage 以使用自定义 NSAttributedString.

将正确的字体设置到代码部分

我在该应用程序中进行了调查,发现它由移至 GitHub 之前 GitHawk 的创建者 Ryan Nystrom 管理。 GitHawk 降价 reader 与您在 GitHub 应用程序中找到的降价非常相似,有趣的是 GitHawk 是 open source 所以我看了一下该代码并试图理解如何复制。

事实证明,GitHawk 大量使用 IGListKit 框架并解析 ListDiffable 元素中的降价,特别是代码块 ListDiffables 被提供给 ListSectionController 创建水平 [=13] =] 显示代码。

我放弃了尝试更多地了解这一点,因为 GitHawk 代码真的很纠结,提取特定功能真的很难,几乎不可能。