Ответ 1
На самом деле это не решение, а большая часть работы.
Я обнаружил, что верхние, нижние, левые и правые ограничения ведут себя по-разному при построении на iOS 8 и iOS 7 при использовании CGAffineTransformMakeRotation. Однако CenterX и CenterY ведут себя одинаково для каждого. Кроме того, ограничения по высоте и ширине будут вести себя одинаково до тех пор, пока вы addConstraint
к тому же самому виду вы constraintWithItem
.
Итак, если вы можете изменить свои ограничения для представления, которое использует CGAffineTransformMakeRotation, чтобы использовать только высоту, ширину, CenterX, CenterY, то вы должны иметь одинаковые ограничения, одинаковые при создании на обеих версиях iOS.
Ниже приведен пример моего собственного кода, который давал мне тот же макет, независимо от версии iOS:
// Rotate View 90º
endorseHereLabel.transform = CGAffineTransformMakeRotation(-(M_PI)/2);
[self addSubview:endorseHereLabel];
[self bringSubviewToFront:endorseHereLabel];
// Configure Constraints
[self addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:lineView1
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:40.0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:lineView1
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:kBottomBuffer]];
[endorseHereLabel addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:12.0]];
[endorseHereLabel addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:250.0]];