Как заставить layoutSubviews UIView.

У меня есть пользовательский UIView, у которого есть выделенный, ручной набор кадров для портретной и альбомной ориентации, потому что autoresizingMasks просто не работает в моем случае.

Я установил этот кадр в:

- (void)viewWillAppear:(BOOL)animated 

И он работает так, как ожидалось.

Моя проблема заключается в том, что мой UIView также имеет подзаголовки, которые также имеют выделенную позицию для портрета / пейзажа.

Я размещаю эти подпрограммы в:

 - (void)layoutSubviews 

Если я теперь оставил свой viewController, например, в портретной ориентации, поверните на пейзаж на другой viewController, а затем вернитесь к этому viewController. Я вижу, что мое представление было правильно изменено, но subviews моего представления, которые располагаются в layoutSubviews, еще не перегруппированы, но изменяются в анимированном порядке после того, как представление уже появилось.

Я ничего не делаю в viewDidAppear, и я уже пробовал звонить

  - (void)layoutIfNeeded 

Так же как:

  - (void)setNeedsLayout 

В viewWillAppear, но он ничего не меняет.

Любые идеи, что я делаю неправильно?

Благодарю.

Сегодня была аналогичная проблема. Я решил это, сначала позвонив

  • -setNeedsLayout : установить флаг, который соответствует макету представления, а затем вызвать
  • -layoutIfNeeded : немедленно проверьте флаг и – как это было задано вручную до – в результате вызывается макет layoutSubviews.

Не знаю, если это лучший способ, но он работает;)

Я бы предложил установить начальный кадр в viewDidLoad, а затем изменить рамку представления для изменений ориентации в

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

Вам не нужны какие-либо явные анимации в layoutSubviews (не уверены, были ли у вас есть, но это звучало так), так как любые изменения кадра будут синхронизированы с анимацией вращения.

При выключенном экране ориентация должна быть повернута, поэтому ваши изображения должны быть правильно установлены при повторном возврате на экран.

Я также рекомендую посмотреть сеанс WWDC 2010 «Создание анимационного управляемого интерфейса», который более подробно описывает этот материал.

В быстром 3 @iOS 10.1

 override func viewWillAppear(animated: Bool){ //Doesn`t neeed to call super to work view.setNeedsLayout() } 

отлично работает

Для меня работала [self.view setNeedsDisplay] . Это вызывает перерисовку на весь вид. Вы также можете перерисовать выбранное представление, вызвав setNeedsDisplay на конкретном представлении, которое я сделал в моем случае, и он отлично работал.

  • Переход AVplayer в модальный переход
  • Проведите по экрану между двумя представлениями UIViewControllers
  • Доступ к NSArray из каждого контроллера просмотра
  • iOS - presentViewController с прозрачностью
  • Представляем раскадровку ViewController из другого ViewController
  • Как передать выбранные данные обратно на предыдущий контроллер представления
  • Добавить UIViewController в UIScrollView swift 3
  • Нужно ли использовать self.view в UIViewController?
  • Могу ли я использовать viewWillAppear вместо viewDidLoad для большей части моей инициализации и настройки?
  • В iOS 9, почему SFSafariViewController толкается вместо представленного модально?
  • UINavigationController с пользовательской вертикальной панелью кнопок
  • Interesting Posts

    Как включить или отключить биткод для конкретной библиотеки или SDK в проекте Xcode

    Недействительный кеш QLPreviewController

    Определить значение частоты с помощью iPhone

    Как получить iPhone App Crash Log файл с iPhone программным способом

    Соглашения об именах для функций IBAction

    Как загрузить файл plist с диска как NSDictionary на iOS?

    избегать просмотра при открытии клавиатуры из UITextView внутри UITableView с пользовательской ячейкой

    конкатенация nsstring и исключение нулей

    Правила безопасности Firebase: .indexOn уникальные идентификаторы

    FBSDKShareButton отключается даже после входа пользователя в систему?

    Наличие UIToolbar, влияющее на расположение вида контроллера

    как контролировать скорость прокрутки таблицы?

    Идентификатор приложения NSSearchPathForDirectoriesInDomains Изменения для каждого запуска и обновления симулятора на реальном устройстве

    Установить ipa на iPhone

    Добавление изображения в раздел в Monotouch.Dialog

    Давайте будем гением компьютера.