无法让属性字符串在 Swift 中工作

2024-04-09

我试图在代码中设置字符串的一些属性,但无法得到NSAttributedString上班。这是应该更改字符串的函数:

func getAttributedString(string: String) -> NSAttributedString
{
    var attrString = NSMutableAttributedString(string: string)
    var attrs = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18.0)]

    attrString.setAttributes(attrs, range: NSMakeRange(0, attrString.length))

    return attrString
}

这就是我使用它的方式:

if (self.product.packageDimensions != nil) {
        self.descriptionLabel.text = 
                   self.descriptionLabel.text + self.getAttributedString("Package dimensions:").string + 
                   "\n\(self.product.packageDimensions) \n"
    }

但字体保持不变。我究竟做错了什么 ?


您的代码中有 2 个错误。

  1. setAttributes需要一个字典,不是一个Array
  2. 当你使用string属性,你只会得到一个String,所有属性都会丢失。

要向 attributeString 添加或更改属性,必须是mutable。你只会得到一个NSMutableString来自attributedText属性。如果您想更改它,请从中创建一个可变版本并更改它。然后您可以将 attributeText 设置为新的可变版本。


如果您可以将属性字符串作为参数,我将给您一个有效的示例:

func setFontFor(attrString: NSAttributedString) -> NSMutableAttributedString {
    var mutableAttrString: NSMutableAttributedString = NSMutableAttributedString(attributedString: attrString)
    let headerStart: Int = 0
    let headerEnd: Int = 13
    mutableAttrString.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFontOfSize(18.0), range: NSMakeRange(headerStart, headerEnd))

    return mutableAttrString
}

Usage:

myLabel.attributedText = setFontFor(myLabel.attributedText)

正如你所看到的,我使用了attributedText的财产UILabel类,它也适用于UITextView和别的。如果你有另一个标签,你可以使用初始化器创建一个新的 NSAttributedStringNSAttributedString(normalString)正如您已经在问题代码中使用的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法让属性字符串在 Swift 中工作 的相关文章

随机推荐