如果两个单词合适,则在同一行中放置两个单词,如果不将它们放在新行中



所以我有以下问题:

我已经将字符串归因于UITextView中包含的字符串。属性字符串包含两部分 - 普通部分是普通文本,第二部分包含 NSURL - 因此为了更好地可视化,它看起来像:

欲了解更多信息,请阅读此处

我遇到的问题是,如果文本适合一行,我必须将其保留在一行中,如果"HERE"位于第二行,我必须将 READ 也放在第二行。

所以,第一种情况 - 如果一切都适合

欲了解更多信息,请阅读此处

所有其他情况 -

欲了解更多信息 在这里阅读

我试图通过检查屏幕大小是否大于文本字段边界来做到这一点,但它不起作用:

if (label.bounds.size.width < size.width) ... 

我也尝试了其他类似的解决方案,但我认为它们都可以在普通 UILabel 上添加,而不是修改的属性文本。

如果您有任何想法如何处理,我将不胜感激。

谢谢:)

有多种解决方案可以解决此问题。

首先是使用不易破的空间

只需在单击此处之间添加"\u{00a0}",例如单击\u{00a0}HERE

这是链接

第二个是不是添加空格,而是可以在其中添加"_"。

例如

"CLICK_HERE",您可以将"_"的颜色替换为清除。

这是代码

class ViewController: UIViewController {
@IBOutlet weak var temp : UILabel!
override func viewDidLoad() {
let myString = "For more detail information READ_HERE"
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: myString)
attributedString.setColorForText(textForAttribute: "_", withColor: .clear)
temp.attributedText = attributedString
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}

extension NSMutableAttributedString {
func setColorForText(textForAttribute: String, withColor color: UIColor) {
let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive)
self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)
}
}

最新更新