我在iOS 8中有一个动态大小的tableViewCell问题.虽然它在视觉上看起来不错,我得到的日志输出与AutoLayout错误.我把它简化为这个简单的例子.
我在我的单元格中添加了一个UILabel:
self.titleLabel = [[UILabel alloc] init]; self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO; self.titleLabel.numberOfLines = 0; self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; [self.contentView addSubview:self.titleLabel];
我在代码中创建自动布局约束,在updateConstraints中使用Masonry:
[self.titleLabel setContentCompressionResistancePriority:UILayoutPriorityrequired forAxis:UILayoutConstraintAxisVertical]; [self.titleLabel updateConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.contentView.leading).with.offset(padding.left); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); make.top.equalTo(self.contentView.top).with.offset(padding.top); make.bottom.equalTo(self.contentView.bottom).with.offset(-padding.bottom / 2); }];
(我可以用make.edges一步一步,但问题是一样的)
这最初看起来很好.然后,当我对tableview进行任何修改并调用[tableView endUpdates](大概是触发updateContraints)时,我在控制台日志中得到以下内容:
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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand,refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<MASLayoutConstraint:0x7ff4842551e0 UILabel:self.titleLabel.leading == UITableViewCellContentView:self.contentView.leading + 12>","<MASLayoutConstraint:0x7ff484255240 UILabel:self.titleLabel.trailing == UITableViewCellContentView:self.contentView.trailing - 12>","<NSLayoutConstraint:0x7ff484256df0 UITableViewCellContentView:self.contentView.width ==>" ) Will attempt to recover by breaking constraint <MASLayoutConstraint:0x7ff484255240 UILabel:self.titleLabel.trailing == UITableViewCellContentView:self.contentView.trailing - 12>
我不明白问题在这里 – 我想要标签有填充,但为什么这与contentView的整体宽度冲突?
编辑1:
解决方法
您有三个具有相同优先级的约束,这使得系统混淆了如何满足它们.
“”
“”
“”
“”
“”
“”
由于您的单元格的宽度也根据您的设备宽度固定,所以建议对子视图的约束使用一点弱的优先级.
[self.titleLabel updateConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.contentView.leading).with.offset(padding.left).priority(999); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right).priority(999); make.top.equalTo(self.contentView.top).with.offset(padding.top); make.bottom.equalTo(self.contentView.bottom).with.offset(-padding.bottom / 2); }];