使选定的文本视图字符串像iOS的本机"Notes"应用程序一样粗体,斜体,下划线



是否有任何帮助可以使选定的文本视图字符串像iOS的本机"注释"应用程序一样粗体,斜体,下划线。请给我有用的链接。我厌倦了一整天的搜索。非常感谢。

我已经附加了我的代码,以使属性字符串粗体和斜体都像iPhone"笔记"的本机应用程序一样。

attributedString.beginEditing()
attributedString.addAttributes([NSFontAttributeName: UIFont.boldSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.addAttributes([NSFontAttributeName: UIFont.italicSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.endEditing()

但它只给出斜体字符串,而不是粗体。我需要斜体和粗体。谢谢。

代码中的问题是您正在设置斜体字体并覆盖刚刚设置的粗体字体。您需要的是使用具有符号特征的UIFontDescriptor,如您在此 SO 答案中看到的那样。因此,只需初始化您的系统字体,获取其字体描述符并向其添加 trait粗体和 trait斜体。然后,您只需要使用UIFont初始值设定项init(descriptor: UIFontDescriptor, size pointSize: CGFloat)初始化新字体:

迅捷 4 代码:

attributedString.beginEditing()
let systemFont: UIFont = .systemFont(ofSize: 32)
if let descriptor = systemFont.fontDescriptor.withSymbolicTraits([.traitBold, .traitItalic]) {
    let systemFontBoldAndItalic = UIFont(descriptor: descriptor, size: 32)
    attributedString.addAttributes([.font: systemFontBoldAndItalic, .underlineStyle: NSUnderlineStyle.styleSingle.rawValue], range: NSRange(location: 0, length: attributedString.length))
}
attributedString.endEditing()

看看NSAttributedString .您可以使用它来创建在不同范围内具有混合属性的字符串。

在可变版本Objective-C中,NSMutableAttributedString具有像setAttributes(_:range:)这样的方法,可让您更改指定范围内属性字符串的属性。

因此,您将从普通的字符串对象开始初始化 NSMutableAttributedString,然后使用setAttributes(_:range:)函数在字符串范围上设置不同的属性,如粗体、斜体等。

(不,我手边没有示例代码。

虽然这个问题很老,但它可能会帮助某人。

使用NSMutableAttributedString并不能解决问题,因为如果您在自定义文本之前键入任何位置,范围会有所不同。因此,定制将改变以满足更新的范围。我认为如果你有一个很长的字符串,使用 HTML 是更好的解决方案。您可以考虑使用一些开源库,例如ZSSRichTextEditor。希望有帮助。

最新更新