是否有任何帮助使选定的文本视图字符串粗体,斜体,下划线像本机"注释" iOS的应用程序。请给我一些有用的链接。我厌倦了整整一天的搜索。非常感谢。
我附加了我的代码,使属性字符串Bold和Italic都像iPhone的本机应用程序" Notes"。
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()
但它只提供斜体字符串,而不是粗体字。我需要Italic和Bold。感谢。
答案 0 :(得分:7)
您的代码中的问题是您设置斜体字体并覆盖您刚刚设置的粗体字体。您需要的是使用UIFontDescriptor
符号特征,如您在此SO answer中所见。因此,只需初始化您的系统字体,获取其字体描述符并向其添加traitBold和traitItalic。然后,您只需使用UIFont初始值设定项init(descriptor: UIFontDescriptor, size pointSize: CGFloat)
初始化新字体:
Swift 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.string.utf16.count))
}
attributedString.endEditing()
答案 1 :(得分:0)
看看NSAttributedString
。您可以使用它来创建在不同范围内具有混合属性的字符串。
在Objective-C中,可变版本NSMutableAttributedString
具有setAttributes(_:range:)
等方法,可让您更改指定范围内属性字符串的属性。
因此,您从普通的String对象开始初始化NSMutableAttributedString,然后使用setAttributes(_:range:)
函数在字符串的范围内设置不同的属性,如粗体,斜体等。
(不,我没有方便的示例代码。)
答案 2 :(得分:0)
虽然这个问题很老但可能对某人有所帮助。
使用NSMutableAttributedString
无法解决问题,因为如果您在自定义文本之前键入任何位置,则范围将不同。因此,定制将转移以满足更新的范围。
我认为如果你有一个很长的字符串,使用HTML是更好的解决方案。
您可以考虑使用一些开源库,例如ZSSRichTextEditor
希望有所帮助。