I have a custom UITableViewCell
subclass which has had autolayout constraints applied to it in Interface Builder. The cell contains multiple views, including a
In accordance to this multiple lines UILabel GitHub issue, this is a lingering iOS bug.
I found that in iOS 9+, this situation mostly occurs in editing mode, with much unpredictability.
The following workaround only partially works: it requires redrawing the UITableView
twice, and still does not cover all scenarios.
override func viewDidLoad() {
super.viewDidLoad()
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
tableView.reloadData()
}
Notes:
UITextView
is a great alternative to multiple line UILabel
, without the bug. UITextView
does not exhibit any of the IULabel
other oddities either, like alignment errors or flickering.self.tableView.editing
is true
tableView.estimatedRowHeight
reduces the occurrence If you name a property on a UITableViewCell
subclass textLabel
or defaultTextLabel
, then IB will ignore the constraints you have specified and override them with default ones, with no warnings issued.
This is the case even on cells designed in IB with the Custom style, which have no visible textLabel
or detailTextLabel
properties.
This also happen if add a property of type UIImageView
property on a UITableViewCell
subclass and name it imageView
.