我創建使用iOS 8的自上漿細胞與改變高度
tableview.rowHeight = UITableViewAutomaticDimension;
具有自上漿UITableViewCells一個的tableview用於測試的創建單個UIView
並將其與下面的約束添加至cell.contentView
。 (使用磚石)
- (void)updateConstraints {
UIView *superview = self.contentView;
if (!_didSetupConstraints) {
[self.testView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview);
make.height.equalTo(@10.0f);
make.left.equalTo(superview);
make.right.equalTo(superview);
make.bottom.equalTo(superview);
}];
_didSetupConstraints = YES;
}
[super updateConstraints];
}
當我選擇一行我喜歡改變所選單元格的高度。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
[self.testView mas_updateConstraints:^(MASConstraintMaker *make) {
if (selected) {
make.height.equalTo(@100);
}
else {
make.height.equalTo(@10);
}
}];
[UIView animateWithDuration:0.3f animations:^{
[super layoutIfNeeded];
}];
}
看來工作,但是,並出現以下錯誤的Xcode投訴:
Unable to simultaneously satisfy constraints.
那麼問題是contentView
創造本身就是一個高度constaint(因爲contentView.translatesAutoresizingMaskIntoConstraints = YES;
我通過這樣做每個默認值)。
所以當updateConstraints是第一次運行時,系統將在contentView
等於10.0f
後來當setSelected...
叫我改變我的testView
的高度,創造一個高度約束所以那裏有testView.height
(100.0f)之間的衝突contentView.height
(10.0f)並且由於testView
附加到contentView
的底部(爲了使自定尺寸的單元工作),它給出了錯誤。
我試過設置contentView.translatesAutoresizingMaskIntoConstraints = NO;
,但它似乎UITableViewCell無法真正找出一個適當的單元格大小。 (有時它太寬/太小)等。
什麼是適當的方式來實現自動調整大小的細胞,它們的高度可以動態變化?
你有沒有設置'estimatedRowHeight'財產? – Michael
我沒有設置estimatedRowHeight :)但只是測試,並沒有對高度限制衝突的問題有任何影響。 –