【问题标题】:How can I replicate GitHub's app code block style in UITextView?如何在 UITextView 中复制 GitHub 的应用代码块样式?
【发布时间】:2021-03-18 13:38:04
【问题描述】:

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

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

不过,我有一个更难问的问题,我真正想要复制的是 GitHub 应用程序代码块样式,这是我想要复制的最终结果:

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

如果NSTextBlockUIKit 中不可用,我该如何实现这样的目标?

目前我所做的只是覆盖NSTextStorage 以使用自定义NSAttributedString 为代码部分设置正确的字体。

【问题讨论】:

标签: uitextview nsattributedstring textkit nslayoutmanager nstextstorage


【解决方案1】:

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

事实证明,GitHawk 大量使用 IGListKit 框架并解析 ListDiffable 元素中的 markdown,特别是将代码块 ListDiffables 提供给 ListSectionController,该 ListSectionController 创建了一个水平的 UIScrollView 来显示代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2015-10-01
    相关资源
    最近更新 更多