Ios UIL标签行间距

Ios UIL标签行间距,ios,objective-c,swift,xcode,uilabel,Ios,Objective C,Swift,Xcode,Uilabel,我正在尝试设置Mike Slutsky指定的UILabel中的行距。它适用于我从故事板中指定的文本。当我尝试在代码中设置UILabel.text时,它会恢复为默认的行距。有人能帮我理解如何: 防止它恢复为默认设置,并使用我在情节提要或 在代码中设置值 我已经看到了很多使用NSAttribute和NSParagraph的例子,但是由于现在可以在故事板中设置,我希望他们的答案可能更简单。非常感谢你的帮助 我在上面的链接中设置了“高度倍数”,我唯一的代码如下: import UIKit class

我正在尝试设置Mike Slutsky指定的
UILabel
中的行距。它适用于我从故事板中指定的文本。当我尝试在代码中设置
UILabel.text
时,它会恢复为默认的行距。有人能帮我理解如何:

  • 防止它恢复为默认设置,并使用我在情节提要或

  • 在代码中设置值

  • 我已经看到了很多使用
    NSAttribute
    NSParagraph
    的例子,但是由于现在可以在故事板中设置,我希望他们的答案可能更简单。非常感谢你的帮助

    我在上面的链接中设置了“高度倍数”,我唯一的代码如下:

    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

    但是,如果您随后在代码中设置标签的
    文本
    ,您将丢弃
    attributedText
    ,从而丢弃它所具有的所有属性。这就是为什么,正如您正确地说的,事情会恢复到标签的默认外观

    解决方案是:不设置标签的
    文本
    ,而是设置其
    属性文本
    。特别是,获取标签现有的
    attributedText
    ;将其分配到NSMutableAttributedString,以便您可以更改它;在保留属性的同时替换其字符串;并将其分配回标签的
    attributeText

    例如(我已经调用了我的标签
    lab
    ——您的
    textView
    是一个错误的选择,因为文本视图是完全不同的):

    UILabel有

    @属性(非原子,复制)NSAttributedString*attributedText
    从iOS 6.0开始

    默认情况下,此属性为零。将新值指定给此属性也会使用相同的字符串数据替换文本属性的值,尽管没有任何格式信息。此外,指定新的a值将更新字体、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
    

    没有太多代码要显示,但我已经添加了它。谢谢你的建议。实际上非常有用!这让我更好地了解了问题所在。我想我可以根据这个回答。当你设置
    textView.text
    重置属性文本时。改为设置
    textView.attributedText
    ,每次都使用
    NSAttributedString
    。这完全有道理。谢谢你的回复和代码!我得到错误utf16Count'不可用:取而代之的是UTF-16视图的计数,即计数(str.utf16),但我正在研究解决方案。再次感谢你说得对,我是在旧版本的Xcode下测试的。抱歉,现在修好了,抱歉,很好用!再次谢谢,先生。我知道你会喜欢的。请注意,这只是将旧文本的第一个字符的属性强加给新文本。这可能适用于您的简单情况,因为第一个字符的属性包括您感兴趣的段落属性和字体属性;但如果属性更复杂,则需要更复杂的代码。
    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