gpt4 book ai didi

iphone - 设置 attributedText 后防止自动 UILabel 字体更改

转载 作者:搜寻专家 更新时间:2023-10-31 21:48:42 25 4
gpt4 key购买 nike

我发现如果我将属性文本设置为 UILabel,预定义字体将更改为属性文本第一个字符的字体。例如:

// the font size is set to 20 in Interface Builder
println(theLabel.font.pointSize);
var styledText = NSMutableAttributedString(string: "$100");
var smallFont = UIFont(name: theLabel.font.fontName, size: theLabel.font.pointSize / 2)!;
styledText.addAttribute(NSFontAttributeName, value: smallFont, range: NSMakeRange(0, 1));
theLabel.attributedText = styledText;
println(theLabel.font.pointSize);
// output:
// 20
// 10

我不知道它是否可以称为错误,但在某些情况下它会导致问题。

有人可以建议一个干净的解决方案来获取在 Interface Builder 中设置的默认字体吗?

将字体重置为预定义字体的一种解决方案是设置 UILabeltext 属性,因为这会导致 UILabel 切换到纯文本模式(不再有属性文本)。

theLabel.text = ""; // reset the font
println(theLabel.font.pointSize);
// output:
// 20

最佳答案

假设 let myLabel: UILabel 的字体大小为 20。myLabel 应该显示属性文本:“foo bar”,其中“bar”的字体大小共 30 个。

如果您更改 myLabel 上的字体,目的是将“foo”的字体大小更改为 15 而不是 20,您会注意到这会导致您的 attributedText 被搞砸了。

受@Majid 发现的启发,如果您在应用字体更改之前设置 text 属性。 attributedText 保持不变,现在更新为新的“默认”字体!

func setFont(_ font: UIFont, keepAttributes: Bool = true) {
// Store attributedText before it gets ruined by font change
let attributed = attributedText
if attributed != nil && keepAttributes {
// This trick enables us to change "default" font for our attributedText.
text = ""
}
// Apply font change
self.font = font.font
if keepAttributes {
// Restore attribute text, now with a new `default` font
attributedText = attributed
}
}

关于iphone - 设置 attributedText 后防止自动 UILabel 字体更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29789342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com