Я обновляю свое приложение для iOS8 и заметил изменение поведения с помощью [NSLayoutConstraint limitedWithItem: ..].
Это отлично работает в iOS7, но в iOS8 ограничение с представлением, которое является вложенным подпредставлением, работает неправильно.
NSLayoutConstraint *myConstraint = [NSLayoutConstraint constraintWithItem:myView.mySubview.label attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:label2 attribute:NSLayoutAttributeBottom multiplier:1.0 constant:10.0];
По сути, это выглядит так, поскольку координаты myView.mySubview.label y равны 0 в его непосредственном супервизоре (mySubview), он помещает label2 относительно y=0. Однако самый верхний родительский вид (myView) имеет произвольную координату y, которую ограничение не соблюдает. Это как если бы Autolayout просто берет координату y вида в своем непосредственном супервиде, а не в контексте всего. Опять же, эта же строка отлично работает в iOS7.
Если я применю ограничение только к представлениям верхнего уровня:
NSLayoutConstraint *myConstraint = [NSLayoutConstraint constraintWithItem:label1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:label2 attribute:NSLayoutAttributeBottommultiplier:1.0 constant:10.0];
Это отлично работает на iOS7 и 8.
Новое поведение или ошибка iOS8?