Когда ограничения автоопределения устанавливают кадры во время жизненного цикла контроллера?

Я использовал ограничения автоопределения из раскадровки. Однако в некоторых случаях я хочу рассчитать динамическую высоту subview. Я кодирую это в viewDidAppear (), он отлично работает, потому что этот метод вызывается после того, как все кадры представления заданы ограничениями макета. Проблема здесь в том, что я вижу рамку, заданную ограничениями на полсекунды. И тогда код перерисовывает представление.

Я узнал о viewDidLayout (), который вызывается после того, как ограничения задали фрейм, чтобы я мог измениться. Но это не сработает. Это похоже на то, что этот метод вызывается до того, как используются ограничения.

3 Solutions collect form web for “Когда ограничения автоопределения устанавливают кадры во время жизненного цикла контроллера?”

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

Если изменение, которое вы хотите сделать, является одноразовым событием, вы можете сделать это в методе viewWillAppear . Но это не всегда поможет, потому что к этому времени чертеж не может быть завершен. Таким образом, лучший вариант – поместить код в viewWillLayoutSubviews или viewDidLayoutSubviews .

ПРИМЕЧАНИЕ. viewWillLayoutSubviews или viewDidLayoutSubviews будут вызываться несколько раз в жизненном цикле просмотра, например, изменение ориентации или перемещение в другое или другое изображение или любое изменение кадра в этом случае.
Если изменение кода, которое вы хотите разместить здесь, является одноразовым событием, тогда обязательно используйте флаги.

например:-

 - (void)viewWillLayoutSubviews { if(firstTime) { // put your constraint change code here. } } 

Надеюсь это поможет! 🙂

Как следует из названия, viewDidLayoutSubviews вызывается, когда представление вашего viewController только что завершило его выкладку, и вы можете предположить, что на этой динамической высоте ваши представления находятся в их правильных местах / кадрах в соответствии с вашими ограничениями автоопределения.

 Swift : override func viewDidLayoutSubviews() { // Set your constraint here } Objective C : -(void)viewDidLayoutSubviews { // Set your constraint here } 

Я не уверен, что вы на самом деле пытаетесь сделать в viewDidLayoutSubviews() . Я всегда использую, чтобы настроить представление, изменяя значения ограничений макета, переопределяя этот метод.

  // Called to notify the view controller that its view has just laid out its subviews override func viewDidLayoutSubviews() { //Write your code here, any constraint modification etc. super.viewDidLayoutSubviews() } 
  • Xcode - отключить отладку
  • Как установить Done key на клавиатуре в swift-laguage?
  • Xcode: проблема «file xxx.png отсутствует в рабочей копии» в проекте
  • Как использовать Realm на Swift Playground?
  • lldb точка останова для всех методов в объекте класса c
  • Захват var из функции в другом ViewController | стриж
  • Xcode / clang: почему некоторые, не все из моих заголовков дают «предупреждение: нет правила для обработки файла xxx для архитектуры arm7»
  • Невозможно выполнить отладку в Xcode: информация об отладке из этого модуля будет недоступна в отладчике
  • Включение уведомления PUSH в существующем загруженном приложении
  • Как на самом деле устройство для iOS-устройства и симулятора отличается?
  • Преобразование MIDI-файла в аудиофайл с использованием библиотеки звуковых фонограмм SF2 с аудиокитом
  • Interesting Posts

    Как отлаживать медленное время загрузки приложения для iOS

    Как определить, работает ли пользовательское расширение ios8 в не оптимизированном приложении iphone 6?

    Использование Private Framework: импорт RadioPreferences.h

    Как выглядит обработчик завершения в C # при попытке анимации?

    Любой способ хранения структуры в NSCache

    Могут ли genstrings работать с пользовательскими #defines?

    ios – Развернуть таблицу вида таблицы, как приложение Twitter

    Создание расширения общего доступа iOS через командную строку

    Включение GDAL / OGR в проект iOS – Краткое руководство

    Программно изменить высоту навигационной панели в быстрой

    Обновить таблицу в режиме реального времени

    Используйте PDF в XCode для AppIcon (коллекция .appiconset)

    Как получить опцию из decodeIntegerForKey вместо 0?

    Как получить представление таблицы для прокрутки над изображением?

    Как центрировать UIActivityIndicator?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.