自定义UITableViewCell中带有attributionText的UILabel:重用之前不呈现颜色(iOS10)

时间:2017-09-25 21:02:23

标签: ios swift nsattributedstring

我有这样的便利扩展:

extension NSMutableAttributedString {

    func append(string: String, attributes: [String: Any]) {
        let attributed = NSMutableAttributedString(string: string)
        let range = NSRange(location: 0, length: string.utf16.count)
        for (attribute, value) in attributes {
            attributed.addAttribute(attribute, value: value, range: range)
        }
        append(attributed)
    }
}

我在UILabel中设置文字样式:

let normalAttributes = [NSForegroundColorAttributeName: darkGray]
let lightAttributes = [NSForegroundColorAttributeName: lightGray]
let text = NSMutableAttributableString()
text.append("Part 1", attributes: normalAttributes)
text.append("Part 2", attributes: lightAttributes)

所有这些都在自定义UITableViewCell类中。发生的事情是文本使用NIB文件中的基色进行渲染,而不是根据我的属性字符串自定义前景颜色 - 直到我做某事(如滚动)导致细胞重用,之后突然颜色正确渲染

我似乎无法发现对象的生命周期有任何问题,并且没有其他地方可以搞乱这个标签。标签fwiw是一个IBOutlet,所以我不是每次创建一个新的或任何奇怪的。

2 个答案:

答案 0 :(得分:2)

原来它的问题与:

相同

Attributed string in tableviewcell not showing bold text until the cell is dequeued and reloaded

所以通过设置字体和&来解决它。在设置nil之前,标签上的颜色为attributeText。很烦人,但很容易做到这一点。

答案 1 :(得分:0)

@Kiril Savino所建议。将q中的from sqlalchemy.event import listen def q(page=0, page_size=None): query = session.query() listen(query, 'before_compile', apply_limit(page, page_size), retval=True) return query def apply_limit(page, page_size): def wrapped(query): if page_size: query = query.limit(page_size) if page: query = query.offset(page * page_size) return query return wrapped 设置为Font & Color可以很容易地解决问题。

但是我今天注意到的另一件事是UILabel中使用的nil

应该从Default FontStoryboard or XIB进行这项工作。 如果您使用了其他System Font,它将无法正常工作。

因此,请确保Storyboard or XIB中的Custom Font应该Default Font

谢谢。