У меня проблемы с табличным представлением динамического размера в iOS 8. Хотя он визуально выглядит нормально, я получаю выход журнала с ошибками AutoLayout. Я привел его к этому простому примеру.
Я добавляю UILabel в свою ячейку:
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.titleLabel.numberOfLines = 0;
self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
[self.contentView addSubview:self.titleLabel];
Я создаю свои ограничения макета в коде, используя Masonry, в 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);
}];
(я мог бы сделать это за один шаг с make.edges, но проблема такая же)
Это изначально выглядит и отлично работает. Затем, когда я выполняю какие-либо изменения в представлении таблицы и вызываю [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:
Если я удалю заполнение, я больше не получу ошибку. Есть ли другой способ, который я могу установить?