У меня есть приложение, которое было построено с помощью auto-layout
, и все работает по-прежнему, как и ожидалось, когда я запускаю его на своем устройстве iOS 7, однако, когда я запускаю его на устройстве iOS 8, некоторые из моих ограничений идут немного странно.
Я действительно испытал подобную проблему в другом приложении, но это была не большая проблема. Теперь я начинаю задаваться вопросом, является ли это ошибкой в SDK iOS 8 или существует новый способ обработки автоматического макета в iOS8, о котором я не знаю.
Вот моя настройка:
У меня есть UIView
с UIImageView
, встроенным внутри него. Как представление, так и изображение имеют ограничения, связывающие их нижний, передний и задний фронты с их супервизорами с константой = 0.
UIView
также имеет верхний край, прикрепленный к его супервину, и у меня есть IBOutlet, связанный с ограничением, чтобы его программно настроить. UIImageView
имеет четвертое ограничение, фиксирующее его высоту до высоты устройства (в моем случае 568).
Вот поведение, которое я ожидаю в iOS 7: Я пытаюсь уменьшить высоту представления контейнера и привести к тому, что верх изображения будет отключен без изменения соотношения сторон (вроде бы похоже, что вы обрезали верх изображения)... вот почему Я прикрепил высоту изображения и нижнего края.
Что на самом деле происходит в iOS8:
Вид контейнера сокращается, как ожидалось (он остается прижатым к бокам и внизу, а высота сжимается). UIImageView
ведет себя так, как если бы он имел ограничение верхнего пространства с cosntant == 0. Вместо того, чтобы отрезать верхнюю часть изображения, все изображение сжимается. Так как у меня есть изображение в режиме AspectFit
, стороны также зажимают, чтобы соотношение сторон было одинаковым (но сам образ просмотра остается прикрепленным к ведущему, заднему и нижнему краям, как это должно быть).
Как я это делаю: У меня есть уведомление, которое срабатывает из другой части моего кода, чтобы настроить ограничение верхнего уровня, подключенное к IBOutlet. Метод, который он вызывает, действительно очень прост:
- (void) setTopSpaceForContainerView:(NSNotification*) notif{
containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue];
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
}
У кого-нибудь есть аналогичный опыт? Я пытаюсь найти обходной путь, но iOS 8 просто решил сжать изображение.
Спасибо, тонна!