我使用动态高度 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。
我已将故事板文件检查为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>
评论 当然,在storyboard xml中手动更改之后,一切运行良好,没有任何NSLayoutConstraint警告。