blo*_*ork 13 objective-c uitableview ios autolayout ios8
我在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];
Run Code Online (Sandbox Code Playgroud)
我在代码中创建我的自动布局的限制,采用砌体中updateConstraints:
[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);
}];
Run Code Online (Sandbox Code Playgroud)
(我可以用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>
Run Code Online (Sandbox Code Playgroud)
我不明白这里的问题是什么 - 我希望标签有填充,但为什么会与contentView的整体宽度冲突?
如果我删除填充,我不再收到错误.还有其他方法我可以设置吗?
小智 3
您有三个具有相同优先级的约束,这使得系统混淆如何完全满足它们。“”、“”、“”
由于单元格的宽度也是根据设备宽度固定的,因此我建议对子视图的约束使用稍微弱的优先级。
[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);
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10170 次 |
| 最近记录: |