iOS 9中UILabel中的多行文本

时间:2015-09-28 13:03:51

标签: ios xcode interface-builder ios9

我正在开发iOS项目但是当我更新到iOS 9时,我在UILabels中遇到了多线问题。我正在使用 Autolayout

有谁知道如何在iOS 9中进行操作?

我尝试了不同的方式,例如:

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

(来自其他类似的问题)但它没有用。

这是我显示多行的逻辑:

IB配置:

preferedMaxLayout

enter image description here

label config

我以编程方式更新此值:

- (void)configureLabelsMaxLayoutWidth
{
     [self.view layoutIfNeeded];
     self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.frame);
}

我在 viewWillAppear

上调用此方法

4 个答案:

答案 0 :(得分:8)

通过将numberOfLines设置为0,您可以将标签告知多行,但可能还有其他因素会禁用多行。你在使用autolayout吗?如果是,那么问题可能是标签Content Compression Resistance Priority太低,请尝试将其设置为Required1000

内容压缩阻力告诉视图引擎您的标签可以缩小的优先级。将其设置为必需会强制它不缩小。

在Interface Builder中,只需选择标签,点按Size Inspector(小标尺),然后将其更改为1000.
enter image description here

或者,在代码中,等效的是:

[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

答案 1 :(得分:3)

设置约束后,请记住preferredMaxLayoutWidth

label.numberOfLines = 0
label.preferredMaxLayoutWidth = superview.bounds.size.width - 20

答案 2 :(得分:0)

我有类似的问题,我需要在最后调用layoutIfNeeded():

textLabel.text = "your loooooooong text"
textLabel.lineBreakMode = .ByWordWrapping
textLabel.numberOfLines = 0
textLabel.layoutIfNeeded()

答案 3 :(得分:0)

(Swift 4,xCode 9.3.1)我知道这不适用于所有跨越这个答案的人,但希望它可以帮助某人。我的情况是我有一个绑定到superview的UIScrollView。我想在ScrollView中添加一个带有大量文本的UILabel,宽度相等,所以它只能垂直滚动。基本上我想要一个垂直滚动的UILabel绑定到superview。我遇到了一个问题,即即使将numberOfLines设置为零,UILabel仍保持一条线。

这是我用来完成这项工作的ViewController中的代码。

class DetailsController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView! {
    didSet {
        scrollView.delegate = self
        scrollView.addSubview(detailsLabel)
    }
}

var detailsLabel = UILabel()

let detailsText = "Insert lots of text here"

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    detailsLabel.numberOfLines = 0
    detailsLabel.text = detailsText + detailsText
    detailsLabel.frame.size.width = (scrollView?.frame.size.width)!
    detailsLabel.sizeToFit()
    scrollView?.contentSize = detailsLabel.frame.size
}

}