Автоматически масштабируйте 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

Ссылка от: /questions/21661400/avtomaticheski-masshtabirujte-uiview-pri-izmenenii-orientatsii-chtobyi-proportsionalno-masshtabirovat-ego-chtobyi-ono-sootvetstvovalo-roditelskomu-vidu/21661420#21661420

Другая полезная информация о 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;

Если вам нужна дополнительная ссылка, я думаю, что это два прекрасных вопроса:

1) Автоматическое изменение размера масок программно

2) UIView и AutoresizingMask игнорируются

Другие вопросы по тегам