我想通过空格扩展文本

时间:2016-12-30 05:32:44

标签: ios nsattributedstring strikethrough

我使用NSAttributeString在我的文字上设置删除,我希望它延伸到whitespace

我已经设置了正确的范围,但是通过仅覆盖文本字符。除非我在它之前和之后添加一些非空文本,否则删除是忽略空格。

如何通过在没有额外文本的情况下扩展空格来进行删除?

enter image description here

3 个答案:

答案 0 :(得分:3)

我今天遇到了同样的问题,现有的答案都没有给我一个解决方案,我认为它应该是应该的。经过研究,我发现了使用Unicode字符的更简洁的解决方案。

用一个或多个不间断的Unicode空格字符(U+00A0)填充文本的每一行,以根据需要扩展行:

let attributedText = NSAttributedString(
    string: "\u{00A0}\(someText)\u{00A0}",
    attributes: [.strikethroughStyle: NSUnderlineStyle.single.rawValue]
)

答案 1 :(得分:2)

我没有找到任何解决方案,但是你的最后一个选项意味着将第一个和最后一个字符添加为.,空格可以尝试一件事。将第一个和最后一个字符的NSForegroundColorAttributeName设置为标签的背景颜色,或将NSFontAttributeName设置为UIFont.systemFont(ofSize: 0.1)。所以它会是这样的。你还没有指定你的答案语言,所以我在最新的Swift 3中发布了答案。

let attributedText = NSMutableAttributedString(string: self.lbl.text!)
attributedText.addAttributes([NSStrikethroughStyleAttributeName: 2], range: NSMakeRange(0, self.lbl.text!.characters.count))
self.lbl.attributedText = attributedText

在使用NSForegroundColorAttributeName&之前NSFontAttributeName enter image description here

现在,您可以使用NSForegroundColorAttributeNameNSFontAttributeName来隐藏第一个和最后一个dot(.)字符。

let attributedText = NSMutableAttributedString(string: self.lbl.text!)
attributedText.addAttributes([NSStrikethroughStyleAttributeName: 2], range: NSMakeRange(0, self.lbl.text!.characters.count))
attributedText.addAttributes([NSForegroundColorAttributeName: UIColor.white], range: NSMakeRange(0, 1))
attributedText.addAttributes([NSForegroundColorAttributeName: UIColor.white], range: NSMakeRange(self.lbl.text!.characters.count - 1, 1))
//Or either Set NSFontAttributeName instead of NSForegroundColorAttributeName
//attributedText.addAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 0.1)], range: NSMakeRange(0, 1))
//attributedText.addAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 0.1)], range: NSMakeRange(self.lbl.text!.characters.count - 1, 1))
self.lbl.attributedText = attributedText

使用NSForegroundColorAttributeNameNSFontAttributeName enter image description here

答案 2 :(得分:0)

对于那些只想通过空白水平线的人,这是解决问题的方法(快速4):

let line = String(repeating: "\u{23AF}", count: 10)