Автоматически масштабируйте UIView при изменении ориентации, чтобы пропорционально масштабировать его, чтобы оно соответствовало родительскому виду.
UIImage
представление, установленное на "Соотношение сторон", будет автоматически динамически масштабировать свое изображение, чтобы соответствовать текущим границам UIUmageView
, сохраняя при этом пропорции изображения. UIView
Установлено, что "Aspect Fit", похоже, не оказывает такого же эффекта на его подвиды.
Я попытался установить родительский вид с помощью кода, с кодом ниже, и попытался несколько вариантов маски автоматического изменения размера (я не использую автоматическое расположение). Я что-то упускаю из виду, или мне нужно написать небольшой код, чтобы вычислить правильный масштаб для моего подвида на основе текущего размера родительского представления?
[self.view setContentMode:UIViewContentModeScaleAspectFit];
4 ответа
Я играл с этим. Это неполно, просто обрабатывает портретное масштабирование подпредставления, но пока работает нормально.
if (self.view.bounds.size.width < self.view.bounds.size.height) {
NSLog(@"view is portrait");
if (_sview.frame.size.width < _sview.frame.size.height) {
NSLog(@"subview is portrait");
[UIView animateWithDuration:0.1
animations:^{
_sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
}];
} else {
NSLog(@"subview is landscape");
}
} else {
NSLog(@"landscape");
if (_sview.frame.size.width < _sview.frame.size.height) {
[UIView animateWithDuration:0.1
animations:^{
_sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.65, 0.65);
}];
} else {
NSLog(@"subview is landscape");
}
}
Из документации:
Режим содержимого определяет, как корректируется кэшированное растровое изображение слоя представления при изменении границ представления.
Для изображения это говорит об изображении. Для представления, которое рисует свой контент, речь идет о нарисованном контенте. Это не влияет на макет подпредставлений.
Вам нужно посмотреть на маски авторазмера на месте в подпредставлениях. Контентный режим - это красная сельдь здесь. Если вы не можете достичь нужного макета с помощью масок с автоматическим изменением размера, вам нужно реализовать layoutSubviews
и вычислить позиции и кадры подпредставления вручную.
- Режимы содержимого не влияют на подпредставления представления.
- Вы можете использовать маски с автоматическим изменением размера, чтобы определить, как выложены подпредставления.
- Если этого недостаточно, вы можете реализовать
layoutSubviews
Другая полезная информация о layoutSubviews
: /questions/26645672/kogda-vyizyivaetsya-layoutsubviews/26645684#26645684
Как насчет этого:
self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
Или вы можете попробовать это:
// horizontal
childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
// vertical
childView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
// both
childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
Если вам нужна дополнительная ссылка, я думаю, что это два прекрасных вопроса: