UILabel 行间距
UILabel Line Spacing
我正在尝试按照 Mike Slutsky here 的规定在 UILabel
中设置行间距。它适用于我从情节提要中指定的文本。当我尝试在代码中设置 UILabel.text
时,它恢复为默认行间距。有人可以帮助我了解如何:
避免恢复默认设置,并使用我在 Storyboard 或
上指定的设置
在代码中设置值。
我看过很多关于使用 NSAttribute
和 NSParagraph
的示例,但由于现在可以在 Storyboard 中设置,我希望它们可能是一个更直接的答案。非常感谢您的帮助!
我设置的"Height Multiple"如上图link,我唯一的代码如下:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textView: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
textView.text = "Some example text"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
如果我删除 textView.text 行,它会正确显示,否则会设置回默认行距(或高度倍数)。
这是正在发生的事情。您可以使用自定义行间距在情节提要中进行设置。这意味着,即使您可能不知道,您已经在情节提要中设置了标签的 attributedText
.
但是,如果您随后在代码中设置标签的 text
,正如您所做的那样,您将丢弃 attributedText
,因此所有属性 它有。这就是为什么,正如您所说的那样,事情恢复到标签的默认外观。
解决方法是:不要设置标签的 text
,而是设置它的 attributedText
。特别是,获取标签的现有 attributedText
;将其分配到 NSMutableAttributedString 中,以便您可以更改它;在保留属性的同时替换其字符串;并将其分配回标签的 attributedText
.
例如(我将我的标签命名为 lab
- 你的 textView
是一个糟糕的选择,因为文本视图是完全不同的动物):
let text = self.lab.attributedText
let mas = NSMutableAttributedString(attributedString:text)
mas.replaceCharactersInRange(NSMakeRange(0, count(mas.string.utf16)),
withString: "Little poltergeists make up the principle form of material manifestation")
self.lab.attributedText = mas
UILabel 有
@property(nonatomic, copy) NSAttributedString *attributedText
自 iOS 6.0,
这个属性默认是nil。为这个 属性 分配一个新值也会用相同的字符串数据替换文本 属性 的值,尽管没有任何格式信息。此外,分配一个新值会更新 font、textColor 和其他与样式相关的属性中的值,以便它们反映从属性字符串中的位置 0 开始的样式信息。
如果你再次设置textView.text = "Some example text"
,你将失去你的属性。如果你确定你在做什么,你应该只选择其中一个而不是在它们之间切换
这是@matt 在 Obj 中的回答。 C:
NSMutableAttributedString *mas = [self.lab.attributedText mutableCopy];
[mas replaceCharactersInRange:NSMakeRange(0, [mas.string length])
withString:@"Little poltergeists make up the principle form of material manifestation"];
self.lab.attributedText = mas;
希望这对某人有所帮助!
Swift 3
只需复制并执行此代码即可查看结果
let label = UILabel()
let stringValue = "UILabel\nLine\nSpacing"
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
我正在尝试按照 Mike Slutsky here 的规定在 UILabel
中设置行间距。它适用于我从情节提要中指定的文本。当我尝试在代码中设置 UILabel.text
时,它恢复为默认行间距。有人可以帮助我了解如何:
避免恢复默认设置,并使用我在 Storyboard 或
上指定的设置
在代码中设置值。
我看过很多关于使用 NSAttribute
和 NSParagraph
的示例,但由于现在可以在 Storyboard 中设置,我希望它们可能是一个更直接的答案。非常感谢您的帮助!
我设置的"Height Multiple"如上图link,我唯一的代码如下:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textView: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
textView.text = "Some example text"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
如果我删除 textView.text 行,它会正确显示,否则会设置回默认行距(或高度倍数)。
这是正在发生的事情。您可以使用自定义行间距在情节提要中进行设置。这意味着,即使您可能不知道,您已经在情节提要中设置了标签的 attributedText
.
但是,如果您随后在代码中设置标签的 text
,正如您所做的那样,您将丢弃 attributedText
,因此所有属性 它有。这就是为什么,正如您所说的那样,事情恢复到标签的默认外观。
解决方法是:不要设置标签的 text
,而是设置它的 attributedText
。特别是,获取标签的现有 attributedText
;将其分配到 NSMutableAttributedString 中,以便您可以更改它;在保留属性的同时替换其字符串;并将其分配回标签的 attributedText
.
例如(我将我的标签命名为 lab
- 你的 textView
是一个糟糕的选择,因为文本视图是完全不同的动物):
let text = self.lab.attributedText
let mas = NSMutableAttributedString(attributedString:text)
mas.replaceCharactersInRange(NSMakeRange(0, count(mas.string.utf16)),
withString: "Little poltergeists make up the principle form of material manifestation")
self.lab.attributedText = mas
UILabel 有
@property(nonatomic, copy) NSAttributedString *attributedText
自 iOS 6.0,
这个属性默认是nil。为这个 属性 分配一个新值也会用相同的字符串数据替换文本 属性 的值,尽管没有任何格式信息。此外,分配一个新值会更新 font、textColor 和其他与样式相关的属性中的值,以便它们反映从属性字符串中的位置 0 开始的样式信息。
如果你再次设置textView.text = "Some example text"
,你将失去你的属性。如果你确定你在做什么,你应该只选择其中一个而不是在它们之间切换
这是@matt 在 Obj 中的回答。 C:
NSMutableAttributedString *mas = [self.lab.attributedText mutableCopy];
[mas replaceCharactersInRange:NSMakeRange(0, [mas.string length])
withString:@"Little poltergeists make up the principle form of material manifestation"];
self.lab.attributedText = mas;
希望这对某人有所帮助!
Swift 3 只需复制并执行此代码即可查看结果
let label = UILabel()
let stringValue = "UILabel\nLine\nSpacing"
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