Xcode/Swift中UILabel与UITextView行间距问题及相关疑问
Swift中UILabel行间距的问题解答
嘿,我来帮你理清这个UILabel和UITextView行间距的问题~
问题1:有没有不用属性字符串就能修改UILabel行间距的方法?
很遗憾,没有。苹果官方只提供了通过NSAttributedString来控制UILabel行间距的途径。默认状态下,UILabel的行间距是由字体本身的lineHeight决定的,而UITextView用属性字符串时能明确设置lineSpacing,这就是为啥你明明字号相同,却看到两者行间距不一样的核心原因。
怎么确定UILabel当前的行间距数值?
UILabel没有直接暴露行间距的属性,但我们可以通过字体的相关参数计算出来。试试这段代码:
let testLabel = UILabel() testLabel.text = "测试多行文本内容" testLabel.font = UIFont.systemFont(ofSize: 16) // 获取字体默认行高 let defaultLineHeight = testLabel.font.lineHeight // 字体的上升值(从基线到顶部的距离)和下降值(从基线到底部的距离) let ascender = testLabel.font.ascender let descender = testLabel.font.descender // 计算默认行间距:行高减去字体本身的实际高度 let defaultLineSpacing = defaultLineHeight - (ascender - descender) print("当前默认行间距:\(defaultLineSpacing)")
简单说,UILabel的默认行间距是lineHeight减去字体自身的高度(ascender - descender就是字体的实际高度),这样算出来的数值就是当前的行间距啦。
怎么让UILabel和UITextView行间距一致?
最靠谱的方法就是给UILabel也用上属性字符串,设置和UITextView相同的lineSpacing。给你个示例代码:
// 准备要显示的文本 let contentText = "这是一段需要保持行间距一致的文本内容,可能会有多行显示哦" // 给UITextView设置属性字符串(假设你已经这么做了) let textViewParagraphStyle = NSMutableParagraphStyle() textViewParagraphStyle.lineSpacing = 4 // 你设置的行间距数值 let textViewAttributedText = NSMutableAttributedString(string: contentText) textViewAttributedText.addAttribute(NSAttributedString.Key.paragraphStyle, value: textViewParagraphStyle, range: NSRange(location: 0, length: contentText.count)) yourTextView.attributedText = textViewAttributedText // 给UILabel设置相同的行间距 let labelParagraphStyle = NSMutableParagraphStyle() labelParagraphStyle.lineSpacing = 4 // 和UITextView保持一致 let labelAttributedText = NSMutableAttributedString(string: contentText) labelAttributedText.addAttribute(NSAttributedString.Key.paragraphStyle, value: labelParagraphStyle, range: NSRange(location: 0, length: contentText.count)) yourLabel.attributedText = labelAttributedText
如果你觉得每次写这么多代码麻烦,可以给UILabel整个扩展,以后用起来更方便:
extension UILabel { func setCustomLineSpacing(_ spacing: CGFloat) { guard let originalText = self.text else { return } let attributedString = NSMutableAttributedString(string: originalText) let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = spacing attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: originalText.count)) self.attributedText = attributedString } } // 调用的时候一行代码搞定 yourLabel.setCustomLineSpacing(4)
内容的提问来源于stack exchange,提问作者jz_
相关产品推荐
相关产品推荐

