我正在开发iOS项目但是当我更新到iOS 9时,我在UILabels中遇到了多线问题。我正在使用 Autolayout 。
有谁知道如何在iOS 9中进行操作?
我尝试了不同的方式,例如:
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
(来自其他类似的问题)但它没有用。
这是我显示多行的逻辑:
IB配置:
我以编程方式更新此值:
- (void)configureLabelsMaxLayoutWidth
{
[self.view layoutIfNeeded];
self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.frame);
}
我在 viewWillAppear
上调用此方法答案 0 :(得分:8)
通过将numberOfLines
设置为0
,您可以将标签告知多行,但可能还有其他因素会禁用多行。你在使用autolayout吗?如果是,那么问题可能是标签Content Compression Resistance Priority
太低,请尝试将其设置为Required
或1000
。
内容压缩阻力告诉视图引擎您的标签可以缩小的优先级。将其设置为必需会强制它不缩小。
在Interface Builder中,只需选择标签,点按Size Inspector
(小标尺),然后将其更改为1000.
或者,在代码中,等效的是:
[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
}
}