是否有可能减少文本之间的差距,当把在一个UILabel多行?我们可以设置框架,字体大小和行数。我想减少标签中两行之间的差距。
当前回答
这里提到的解决方案对我不起作用。我发现了一个稍微不同的方式来做它与iOS 6 NSAttributeString:
myLabel.numberOfLines = 0;
NSString* string = @"String with line one. \n Line two. \n Line three.";
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.minimumLineHeight = 30.f;
style.maximumLineHeight = 30.f;
NSDictionary *attributtes = @{NSParagraphStyleAttributeName : style,};
myLabel.attributedText = [[NSAttributedString alloc] initWithString:string
attributes:attributtes];
[myLabel sizeToFit];
其他回答
我找到了一种方法,你可以设置真实的行高(不是一个因素),它甚至在界面生成器中渲染。按照下面的说明做就可以了。代码是用Swift 4编写的。
步骤#1:创建一个名为DesignableLabel.swift的文件,并插入以下代码:
import UIKit
@IBDesignable
class DesignableLabel: UILabel {
@IBInspectable var lineHeight: CGFloat = 20 {
didSet {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.minimumLineHeight = lineHeight
paragraphStyle.maximumLineHeight = lineHeight
paragraphStyle.alignment = self.textAlignment
let attrString = NSMutableAttributedString(string: text!)
attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSRange(location: 0, length: attrString.length))
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attrString.length))
attributedText = attrString
}
}
}
步骤#2:将UILabel放入Storyboard/XIB中,并将其类设置为DesignableLabel。等待项目构建完成(构建必须成功!)。
步骤3:现在你应该在属性窗格中看到一个名为“Line Height”的新属性。只需设置您喜欢的值,您应该立即看到结果!
我想在这个答案中加入一些新的东西,这样我就不会感觉那么糟糕了……以下是斯威夫特的回答:
import Cocoa
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 40
let attrString = NSMutableAttributedString(string: "Swift Answer")
attrString.addAttribute(.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
var tableViewCell = NSTableCellView()
tableViewCell.textField.attributedStringValue = attrString
简单的回答是:你不能。要改变文本行间的间距,你必须继承UILabel并滚动自己的drawTextInRect,或者创建多个标签。”
参见:设置UILabel行间距
这是一个非常老的答案,其他人已经添加了新的更好的方法来处理这个问题。请参阅下面提供的最新答案。
下面是一个子类UILabel具有行高属性的类:https://github.com/LemonCake/MSLabel
这应该会有帮助。然后你可以将你的标签分配给故事板中的这个自定义类,并直接在属性中使用它的参数:
open class SpacingLabel : UILabel {
@IBInspectable open var lineHeight:CGFloat = 1 {
didSet {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 1.0
paragraphStyle.lineHeightMultiple = self.lineHeight
paragraphStyle.alignment = self.textAlignment
let attrString = NSMutableAttributedString(string: self.text!)
attrString.addAttribute(NSAttributedStringKey.font, value: self.font, range: NSMakeRange(0, attrString.length))
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
self.attributedText = attrString
}
}
}
Swift 4标签扩展。在传入函数之前创建NSMutableAttributedString,以防有属性文本需要额外的属性。
extension UILabel {
func setLineHeightMultiple(to height: CGFloat, withAttributedText attributedText: NSMutableAttributedString) {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 1.0
paragraphStyle.lineHeightMultiple = height
paragraphStyle.alignment = textAlignment
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length - 1))
self.attributedText = attributedText
}
}