我有一个UITextView,想在文本中添加一些带下划线的链接,代码如下:
subText.text = NSLocalizedString("VC_COMMON_SUBSCRIBE_FULL_TEXT", comment: "")
let theString = subtext.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString
let tcRange = theString.mutableString.range(of: NSLocalizedString("VC_COMMON_SUBSCRIBE_TERMS_TEXT", comment: ""))
let ppRange = theString.mutableString.range(of: NSLocalizedString("VC_COMMON_SUBSCRIBE_PRIVACY_TEXT", comment: ""))
theString.addAttribute(NSLinkAttributeName, value: Config.termsAndConditionsURL(), range: tcRange)
theString.addAttribute(NSLinkAttributeName, value: Config.privacyPolicyURL(), range: ppRange)
theString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: tcRange)
theString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: ppRange)
subtext.attributedText = theString
此代码的问题在于,运行时包含链接的文本部分不可见(尽管链接是可选的,即使其文本无法看到)如果我注释掉链接属性而只是使用下划线属性,然后文本显示为预期下划线。 为什么添加导致文本不显示的链接属性?
我尝试使用UILabel而不是UITextView并且它正确显示,但是在这种情况下链接不起作用,即使UILabel的userInteractionEnabled设置为true。
答案 0 :(得分:0)
我用自己的字符串替换了本地化的字符串,用虚拟链接替换了链接。此代码正确显示文本视图:
let subText = UITextView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
subText.text = NSLocalizedString("These are the terms. This is our privacy policy", comment: "")
let theString = subText.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString
let tcRange = theString.mutableString.range(of: NSLocalizedString("terms", comment: ""))
let ppRange = theString.mutableString.range(of: NSLocalizedString("privacy policy", comment: ""))
theString.addAttribute(NSAttributedStringKey.link, value: "https://google.com", range: tcRange)
theString.addAttribute(NSAttributedStringKey.link, value: "https://google.com", range: ppRange)
theString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: tcRange)
theString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: ppRange)
subText.attributedText = theString
来自游乐场的图片:
您似乎正在使用NSUnderlineStyleAttributeName
之类的常量。它们已重命名为NSAttributedStringKey.underlineStyle
,依此类推。