UITableViewCell doesn't work unless I add views to a container view rather than contentView

浪子不回头ぞ 提交于 2019-12-13 18:09:05

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!