抱歉,如果这是显而易见的,但我已经寻找了一段时间,这一个难住我。
我有一个NSattributedString,它包含:
1)“填充空白”-包含非中断空间的特殊子串,其下划线样式应用于该子串(例如“\u {0a0}\ u {0a0}\ u {0a0}”,下划线样式仅适用于该子串;我最初使用下划线,但它们之间的空间是有问题的。文本不透明度,因此可以看到间隔或重叠)
2)在字符串的末尾多行断线,选择填充空白(例如“……NA”第一选择\NB)第二选择\NC)最后选择“”
然后,我将在标签中显示此NSattributedString,其中NumberOfLines设置为0。
这一点在90%的时间内是有效的,除了10%的非中断“填充空白”出现在一行的结束距离内,这意味着它被推到下一行(如所预料的那样),它推动了所有其他文本的前进,如果有足够的推力发生。在段落中,它将最后一个“choice”行(例如“\nc)last choice”)完全推出标签,这样就不会显示字符串的最后一行!?换句话说,我的标签似乎计算了在应用非中断空格之前需要多大的空间,因此,如果随后由非中断空格/子字符串创建额外的行,则最后一行将被截断,根本不显示。
有没有其他的方法来创建或属性这种非破坏性的“填补空白”,以便它不会字符包装(即保持它在同一行上),但我的标签将理解/重新计算附加线已经创建了由非包装?正如我所提到的,我的标签已经将numberoflines设置为0;也许有某种段落样式或其他标签设置我找不到?或者它只是一个快速的虫子,但有人知道附近的工作?
以下是我的代码片段:
let underlineString = "\u{00a0}\u{00a0}\u{00a0}\u{00a0}\u{00a0}"
let myTextAttributes = [NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue): UIFont(name: "My Font", size: round(self.view.frame.width / 15)) as Any, NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.9)]
let myLabel = UILabel()
myLabel.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
myLabel.textAlignment = .center
myLabel.numberOfLines = 0
var myText = "What do you think about \u{00a0}\u{00a0}\u{00a0}\u{00a0}\u{00a0} and then what about this extra stuff at the end?\na) first choice\nb) second choice\nc) last choice"
var myAttributedText = NSMutableAttributedString(string:myText, attributes: myTextAttributes)
myAttributedText.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleThick.rawValue, range: (myText as NSString).range(of:underlineString))
myLabel.attributedText = myAttributedText
self.view.addSubview(myLabel)
myLabel.translatesAutoresizingMaskIntoConstraints = false
myLabel.heightAnchor.constraint(equalToConstant: self.view.frame.height).isActive = true
myLabel.widthAnchor.constraint(equalToConstant: self.view.frame.width).isActive = true
myLabel.centerXAnchor.constraint(equalTo: myLabel.superview!.centerXAnchor).isActive = true
myLabel.centerYAnchor.constraint(equalTo: myLabel.superview!.centerYAnchor).isActive = true
非常感谢你的时间!
最佳答案
经过更多的研究,很明显uilabel这些天在属性字符串方面有很多bug,所以不确定是否有技术上的工作可以解决上述不间断空间问题。
有了这一点,我可以通过切换回常规字符来处理这个特殊的bug,我的“填补空白”子串,为这些字符设置前景色,然后将底线颜色设置为白色,这样它就不会采用前景色。