【问题标题】:NSAttributedString - compatibility UIKit (iOS) and AppKit (macOS)NSAttributedString - 兼容性 UIKit (iOS) 和 AppKit (macOS)
【发布时间】:2020-02-23 10:56:42
【问题描述】:

我有一个适用于 iOS 和 macOS 的应用程序。这些应用程序使用 Cloudit 在(核心数据)之间共享信息。我将在一个平台(例如 iOS)上创建的 NSAttributedString 存储在核心数据属性中,该属性被定义为可转换类型的属性,因此核心数据使用(我假设)默认 NSCoder 来编码/解码 NSAttributedString 数据。

现在我的 macOS 应用程序可以从 iCloud 读取数据,包括这个 NSAttributedString 并查看/编辑它们。但是这个 NSAttributedString 在 macOS 上看起来完全不同(反之亦然)

不仅大小(我理解,因为 iOS 和 macOS 上的默认大小不同 - 所以我需要调整大小),而且我丢失了格式(粗体、斜体等)。

所以 UIFont 和 NSFont 的字体属性似乎不兼容,对吗?我正在使用标准字体 - 例如在 iOS UIFont.preferredFont(forTextStyle: .body)

也许我必须在 iCloud 中将 NSAttributedString 存储为其他内容(例如将其转换为 RTF/HTML 数据并以这种方式共享),并在读取期间将 RTF/HTML 再次转换为 NSAttributedString。我不是问怎么做(我知道),而是问我是否必须这样做在所有使用的平台上都兼容 NSAttributedString(至少从格式化的角度来看)。 p>

我在网上找不到任何关于此的内容(可能我搜索的关键字错误)。有人有在平台(iOS、macOS)之间共享 NSAttributedString 的经验吗? 对此有什么建议吗?

提前感谢您的建议/帮助。

【问题讨论】:

  • 您应该将其添加为答案,并将其标记为已接受,以便其他人可以看到您的问题已得到解决。
  • 感谢您的提示,我是新来的(作为贡献者)。

标签: core-data uikit nsattributedstring appkit


【解决方案1】:

解决方案

终于我找到了解决方案。问题是UIFont.preferredFont(forTextStyle: .body) 返回的字体在 macOS 平台上无法识别。因此,macOS 没有使用这种未知字体,而是使用 Times New Roman 来表示普通、粗体和斜体变体,这就是为什么我在从 iOS 到 macOS 应用程序的过程中丢失了一些格式信息的原因。

解决方案很简单。而不是使用由

返回的标准字体

UIFont.preferredFont(forTextStyle: .body)

最好使用两个平台上都可用的字体(例如 Arial)。无需将 NSAttributedString 转换为 RTF/HTML 并返回。

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多