IOS UITableViewCell contentView的奇怪行为

时间:2014-11-25 06:55:45

标签: ios uitableview constraints

我使用动态高度 UITableViewCell 和全球技术:

cell = _offCells[identifier];
if (!cell) {
    cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    _offCells[identifier] = cell;
}

[cell setDataForSizeCalculation:data];


[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));

[cell setNeedsLayout];
[cell layoutIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
height += kPadding;

我有一个Base SSTableViewCell 类,如果需要可以扩展。我有两个单元格, SSTableViewCell 的子类。两者都有约束 ContentView - >查看 - > otherElements。当然,两个单元格都用于 estimatedHeightForRowAtIndexPath 方法,具有所需的高度。

问题是:在一种情况下,单元格的高度 282 所需高度),但在其他情况下,单元格是默认高度 44 标准高度,不需要,需要106 )。 我已经在 awakeFromNib 方法中检查了高度。

检查IOS 7,8。

UPD

我已将故事板文件检查为XML,我发现了

第一种情况。正常情况

<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="row.photo" rowHeight="282" id="Hfm-sq-86v" customClass="SSPhotoTableViewCell">
<rect key="frame" x="0.0" y="1" width="320" height="282"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Hfm-sq-86v" id="9TR-fJ-qX2">
<rect key="frame" x="0.0" y="0.0" width="320" height="282"/>
<autoresizingMask key="autoresizingMask"/>
<userGuides>
<userLayoutGuide location="315" affinity="minX"/>
<userLayoutGuide location="10" affinity="minX"/>
</userGuides>
<subviews>

第二种情况。问题案例

<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="user.row.photo" rowHeight="106" id="NRG-Xo-osO" customClass="SSUserPhotoTableViewCell">
<rect key="frame" x="0.0" y="162" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="NRG-Xo-osO" id="jxh-XR-Ksx">
<autoresizingMask key="autoresizingMask"/>
<subviews>

问题

  1. 为什么会这样?(参见 UPD
  2. 如何解决这个问题?(参见 UPD
  3. 为什么问题案例 tableViewCell 错误框架
  4. 为什么问题案例 autoresizingMask 有其他属性( flexibleMaxX,flexibleMaxY )?
  5. 为什么在问题情况 tableViewCellContentView 没有属性框架
  6. 评论 当然,在storyboard xml中手动更改之后,一切运行良好,没有任何NSLayoutConstraint警告。

0 个答案:

没有答案