Abh*_*nav 261 xcode objective-c uilabel swift line-spacing
当放入多行中时,是否可以缩小文本之间的差距UILabel
?我们可以设置框架,字体大小和行数.我想减少该标签中两行之间的差距.
Mik*_*e S 393
在Xcode 6中,您可以在故事板中执行此操作:
Maz*_*yod 249
我想在这个答案中加入新的东西,所以我感觉不那么糟糕......这是Swift的回答:
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
Run Code Online (Sandbox Code Playgroud)
"简答:你不能.要改变文本行之间的间距,你必须继承UILabel并滚动你自己的drawTextInRect,或者创建多个标签."
请参阅:设置UILabel行间距
这是一个非常古老的答案,其他已经添加了新的和更好的方法来处理这个..请查看下面提供的最新答案.
ios*_*ist 101
从iOS 6开始,您可以将属性字符串设置为UILabel.检查以下内容:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:label.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = spacing;
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, label.text.length)];
label.attributedText = attributedString;
Run Code Online (Sandbox Code Playgroud)
d.e*_*nis 80
这里说的解决方案对我不起作用.我发现使用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];
Run Code Online (Sandbox Code Playgroud)
Agu*_*les 34
我做了这个简单的扩展,对我来说非常好用:
extension UILabel {
func setLineHeight(lineHeight: CGFloat) {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 1.0
paragraphStyle.lineHeightMultiple = lineHeight
paragraphStyle.alignment = self.textAlignment
let attrString = NSMutableAttributedString()
if (self.attributedText != nil) {
attrString.append( self.attributedText!)
} else {
attrString.append( 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
}
}
Run Code Online (Sandbox Code Playgroud)
将其复制到一个文件中,这样就可以像这样使用它
myLabel.setLineHeight(0.7)
Run Code Online (Sandbox Code Playgroud)
Kru*_*nal 28
从Interface Builder(Storyboard/XIB):
编程方式:
SWift 4
使用标签扩展
extension UILabel {
// Pass value for any one of both parameters and see result
func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {
guard let labelText = self.text else { return }
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.lineHeightMultiple = lineHeightMultiple
let attributedString:NSMutableAttributedString
if let labelattributedText = self.attributedText {
attributedString = NSMutableAttributedString(attributedString: labelattributedText)
} else {
attributedString = NSMutableAttributedString(string: labelText)
}
// Line spacing attribute
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
self.attributedText = attributedString
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用扩展功能
let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0
// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0
Run Code Online (Sandbox Code Playgroud)
或使用标签实例(只需复制并执行此代码即可查看结果)
let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))
label.attributedText = attrString
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
label.attributedText = attrString
Run Code Online (Sandbox Code Playgroud)
Dre*_*ber 19
现在在iOS 6中有一个替代答案,即使用具有适当段落样式的NSAttributedString在标签上设置attributedText.有关NSAttributedString的行高详细信息,请参阅此堆栈溢出答案:
核心文本 - NSAttributedString线条高度做得对吗?
Thy*_*ius 10
在Swift中,作为一个功能,受到DarkDust的启发
// Usage: setTextWithLineSpacing(myEpicUILabel,text:"Hello",lineSpacing:20)
func setTextWithLineSpacing(label:UILabel,text:String,lineSpacing:CGFloat)
{
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
let attrString = NSMutableAttributedString(string: text)
attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
label.attributedText = attrString
}
Run Code Online (Sandbox Code Playgroud)
根据@Mike的回答,减少lineHeightMultiple
是关键点.以下示例,它适用于我:
NSString* text = label.text;
CGFloat textWidth = [text sizeWithAttributes:@{NSFontAttributeName: label.font}].width;
if (textWidth > label.frame.size.width) {
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
paragraph.lineSpacing = 1.0f;
paragraph.lineHeightMultiple = 0.75; // Reduce this value !!!
NSMutableAttributedString* attrText = [[NSMutableAttributedString alloc] initWithString:text];
[attrText addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, text.length)];
label.attributedText = attrText;
}
Run Code Online (Sandbox Code Playgroud)
SWIFT 3更有效地扩展了行间设置空间的有用扩展:)
extension UILabel
{
func setLineHeight(lineHeight: CGFloat)
{
let text = self.text
if let text = text
{
let attributeString = NSMutableAttributedString(string: text)
let style = NSMutableParagraphStyle()
style.lineSpacing = lineHeight
attributeString.addAttribute(NSParagraphStyleAttributeName,
value: style,
range: NSMakeRange(0, text.characters.count))
self.attributedText = attributeString
}
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了一种方法,您可以设置真实的行高(不是一个因素),它甚至可以在 Interface Builder 中实时呈现。只需按照以下说明操作即可。代码是用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
}
}
}
Run Code Online (Sandbox Code Playgroud)
第 2 步:将 aUILabel
放入 Storyboard/XIB 并将其类设置为DesignableLabel
. 等待您的项目构建(构建必须成功!)。
第 3 步:现在您应该在属性窗格中看到一个名为“行高”的新属性。只需设置您喜欢的值,您应该立即看到结果!