是否有任何帮助可以使选定的文本视图字符串像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。希望有帮助。