У меня возникают проблемы с ограничениями в VFL на iOS 8, а на 6 и 7 все в порядке. Это ограничение:
H:|-margin-[_imageView]-(=>margin)-[_label]-margin-|
Оба _imageView_
и _label
получают свою правильную внутреннюю ширину, и маржа растет, как ожидалось. Я хочу достичь
|-[_imageView]-------------------------------[some text]-|
|-[_imageView]---------------------------[a larger text]-|
|-[_imageView]-----------------------[a very large text]-|
|-[_imageView]-[a very very very very very very larg...]-|
Это нормально визуально, но оно вызывает исключение с нарушенным ограничением:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7b856ee0 H:[UIImageView:0x7b8ef1f0]-(>=12)-[UILabel:0x7b8e7c60'Test']>
После печати _autolayoutTrace
нет двусмысленности.
Однако, если ограничение связано только с метками, нет никакой проблемы:
H:|-margin-[_label1]-(=>margin)-[_label2]-margin-|
Проблема может быть решена в следующих шагах:
Изменение ограничения на удаление >=
и добавление приоритетов:
H:|-margin-[_imageView]-([email protected])-[_label]-margin-|
Настройка приоритета обхода для _imageView
[_imageView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
Установка сопротивления сжатия _label
[_label setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
С этими правилами на любой платформе нет проблем. Все это необходимо на iOS 8? Это ошибка, или я делал это неправильно?
Спасибо.