问题
Background
This is in reference to this post (TLDR; UITableViewCell heights should be calculated automatically if you are using Auto Layout properly).
Problem
If I add the views directly to contentView
, I keep on getting this error:
018-11-25 02:17:33.514881+0200 [78571:855018] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x2825f0be0 V:|-(76)-[.TTRLabel:0x10e7c7e40'DRIVER'] (active, names: '|':UITableViewCellContentView:0x10e7cb700 )>",
"<NSLayoutConstraint:0x2825f0b90 V:[.TTRLabel:0x10e7c7e40'DRIVER']-(10)-[.TTRLabel:0x10e7c8420'TIME'] (active)>",
"<NSLayoutConstraint:0x2825f1c70 V:[.TTRLabel:0x10e7c8420'TIME']-(10)-[.TTRLabel:0x10e7c8a00'ADDRESS'] (active)>",
"<NSLayoutConstraint:0x2825f1ea0 .TTRLabel:0x10e7c96a0' new office '.bottom == UITableViewCellContentView:0x10e7cb700.bottom - 26 (active)>",
"<NSLayoutConstraint:0x2825f1f40 .TTRLabel:0x10e7c96a0' new office '.lastBaseline == .TTRLabel:0x10e7c8a00'ADDRESS'.lastBaseline (active)>",
"<NSLayoutConstraint:0x2825f34d0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x10e7cb700.height == 44 (active)>"
)
My problem is with this part
<NSLayoutConstraint:0x2825f34d0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x10e7cb700.height == 44 (active)>"
It's insisting that the tableViewCell height is just the standard 44 (and thus is ignoring all my autolayout work!
The only thing that solves the problem is running this
self.contentView.autoPinEdgesToSuperviewEdges()
which is weird, b/c it's not documented anywhere and doesn't make sense in the grand scheme of things.
Here is the entire UITableViewCell code for reference.
回答1:
After having used this line
self.contentView.autoPinEdgesToSuperviewEdges()
for a while, we realized that scrolling tables with many cells was jittery and made the phone CPU reach 100%.
So we went back and removed the above lines, fixed the autolayout issues and then things worked well again.
So the problem was simple auto layout problems, the cell height thing was a red herring.
TL;DR: UITableViewCell heights is calculated automatically if you are using Auto Layout properly.
来源:https://stackoverflow.com/questions/53463788/uitableviewcell-doesnt-work-unless-i-add-views-to-a-container-view-rather-than