单行文本在UILabel中占用两行

在这里输入图像说明

正如你在图片中看到的,中间的单元格有一个UILabel,它占用两行,但是文本实际上是一行。 看来,如果文本只需要几个字符来创build一个新行,iOS假定它已经有2行。 这很奇怪

这是我如何创build标签:

self.titleLabel.lineBreakMode = .ByTruncatingTail self.titleLabel.numberOfLines = 0 self.titleLabel.textAlignment = .Left 

约束被设置一次:

 self.titleLabel.autoPinEdgeToSuperviewEdge(.Top) self.titleLabel.autoPinEdgeToSuperviewEdge(.Leading) self.titleLabel.autoPinEdgeToSuperviewEdge(.Trailing) self.titleLabel.autoPinEdgeToSuperviewEdge(.Bottom) 

奇怪的是,当滚动表格以使奇数单元消失并再次滚动时,它具有正常的高度。 滚动后:

在这里输入图像说明

任何想法什么是错的? 我使用的是swift,xcode6.1和iOS8.1

TableViewController:

 override func viewDidLoad() { super.viewDidLoad() self.tableView.registerClass(CityTableViewCell.self, forCellReuseIdentifier:"cell") self.tableView.rowHeight = UITableViewAutomaticDimension self.tableView.estimatedRowHeight = 52 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { if let cell: CityTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as? CityTableViewCell { // Configure the cell for this indexPath cell.updateFonts() cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator if indexPath.row == 1 { cell.titleLabel.text = "Welcome to city 17, Mr. Gordon F." } else { cell.titleLabel.text = "Lamar!!!" } // Make sure the constraints have been added to this cell, since it may have just been created from scratch cell.setNeedsUpdateConstraints() cell.updateConstraintsIfNeeded() return cell } return UITableViewCell(); } 

我想你遇到了这个bug: http : //openradar.appspot.com/17799811 。 标签不能正确设置preferredMaxLayoutWidth

我select的解决方法是使用以下类来UITableViewCell

 class VFTableViewCell : UITableViewCell { @IBOutlet weak var testoLbl: UILabel! //MARK: codice temporaneo per bug http://openradar.appspot.com/17799811 func maxWidth() -> CGFloat { var appMax = CGRectGetWidth(UIApplication.sharedApplication().keyWindow.frame) appMax -= 12 + 12 // borders, this is up to you (and should not be hardcoded here) return appMax } override func awakeFromNib() { super.awakeFromNib() // MARK: Required for self-sizing cells. self.testoLbl.preferredMaxLayoutWidth = maxWidth() } override func layoutSubviews() { super.layoutSubviews() // MARK: Required for self-sizing cells self.testoLbl.preferredMaxLayoutWidth = maxWidth() } } 

OP-注意:

看来自动布局不能正确计算UILabel布局的宽度。 在我的UITableViewCell子类中将首选宽度设置为父宽度解决了我的问题:

 self.titleLabel.preferredMaxLayoutWidth = self.frame.width 

在SO上find: https : //stackoverflow.com/a/19777242/401025