[英]Multiple lines of text in UILabel in iOS 9
我正在開發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上調用此方法
通過將numberOfLines
設置為0
您將告訴標簽為多行,但可能還有其他因素會禁用多行。 你在使用autolayout嗎? 如果是這樣,該問題可能是標簽Content Compression Resistance Priority
太低,嘗試將其設置為Required
或1000
。
內容壓縮阻力告訴視圖引擎您的標簽可以縮小的優先級。 將其設置為必需會強制它不縮小。
在Interface Builder中,只需選擇標簽,點擊Size Inspector
(小標尺),然后將其更改為1000。
或者,在代碼中,等價物將是:
[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
設置約束后,請記住preferredMaxLayoutWidth
label.numberOfLines = 0
label.preferredMaxLayoutWidth = superview.bounds.size.width - 20
我有類似的問題,我需要在最后調用layoutIfNeeded():
textLabel.text = "your loooooooong text"
textLabel.lineBreakMode = .ByWordWrapping
textLabel.numberOfLines = 0
textLabel.layoutIfNeeded()
(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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.