归因于String的前景颜色在Swift中不起作用

时间:2016-07-20 07:20:13

标签: ios swift nsmutableattributedstring

我使用以下代码使用foreground color更改属性字符串的fontSwift。但是字体完全没有任何问题地改变,但foreground color没有改变

var checklistText = NSMutableAttributedString()
        checklistText = NSMutableAttributedString(string: "\(lblChecklistName.text!),\(checklistName)")
        checklistText.addAttribute(NSFontAttributeName,
                                   value: UIFont(
                                    name: "Helvetica",
                                    size: 11.0)!,
                                   range: NSRange(location: lblChecklistName.text!.length(), length: checklistName.length()))
        checklistText.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location: lblChecklistName.text!.length(), length: checklistName.length()+1))
        lblChecklistName.attributedText = checklistText

7 个答案:

答案 0 :(得分:1)

要使foregroundColor工作,您需要将.strokeWidth设置为负数:

let attributes : [ NSAttributedString.Key : Any ] = [.font : UIFont(name: "Helvetica", size: 11.0),
                                                             .foregroundColor : UIColor.red,
                                                             .strokeWidth : -5]
        let stringWithAttributes = NSAttributedString(string: "YOUR STRING", attributes: attributes)

答案 1 :(得分:0)

参考表格:NSMutableAttributedString

var myString:NSString = "I AM KIRIT MODI"
var myMutableString = NSMutableAttributedString()
myMutableString = NSMutableAttributedString(string: myString as 
String, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])
myMutableString = NSMutableAttributedString(string: myString as String, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])
            myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:2))
lbl_First.attributedText = myMutableString

见图片

enter image description here

答案 2 :(得分:0)

我遇到了同样的问题。尽管我没有使用范围来构造AttributedString 我的代码看起来像

self.contentTextLabel.attributedText = NSAttributedString(string: "content",
                                                            attributes: [.foregroundColor: UIColor.red, .background: UIColor.blue])

运行时,背景色显示为蓝色,但是前景色不显示为红色。我认为这是个棘手的问题,所以我也在Objective-C中尝试了一下,但仍然行不通。

我正在使用情节提要,并通过删除该标签上的命名颜色集来解决此问题。我认为这是Apple的错误,标签上设置的命名颜色以某种方式覆盖了属性字符串中设置的前景色。

答案 3 :(得分:0)

在我的情况下,它发生在 13 岁以下的 ios 上。添加负 strokeWidth 就行了。

NSAttributedString.Key.strokeWidth: -3.0

答案 4 :(得分:0)

您应该检查标签文本颜色。如果在给出属性文本值后设置标签文本颜色,它可能会覆盖属性颜色。

yourLabel.attributedText = attrStr //attributed string
yourLabel.textColor = UIColor.black

答案 5 :(得分:0)

将strokeWidth 设置为负数,将strokeColor 设置为所需的颜色。 这对我有用。它适用于 namedColor。

let gdprString = "test test test"

let gdprAttributes = [
    NSAttributedString.Key.underlineStyle: 
    NSUnderlineStyle.single.rawValue,
    NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15.0),
    NSAttributedString.Key.link: gdprString,
    NSAttributedString.Key.strokeWidth: -3.0,      
    NSAttributedString.Key.strokeColor: UIColor.blue 
] as [NSAttributedString.Key : Any]

答案 6 :(得分:0)

2021 年 4 月,我遇到了同样的错误,上面的内容没有任何帮助。但这有帮助:

在设置 textColor 之前,将标签的 attributedText 设置为任何颜色。

let label = UILabel()
label.textColor = .black

label.attributedText = NSAttributedString(string: "Hello, World!", attributes: [.foregroundColor: UIColor.red])