2022-10-01 16:08:20
iOS swift — setNeedsLayout против layoutIfNeeded против layoutSubviews()Когда запускается приложение iOS, UIApplication в iOS запускает основной цикл выполнения приложения, который выполняется в основном потоке. Основной цикл выполнения обрабатывает события (например, касания пользователя) и обрабатывает обновления интерфейсов на основе представлений. По мере возникновения событий, таких как касание, обновления местоположения, управление движением и мультимедиа, цикл выполнения находит соответствующий обработчик для событий, вызывая соответствующие методы, которые вызывают другие методы и так далее.
— setNeedsLayout()
Метод setNeedsLayout для UIView сообщает системе, что вы хотите, чтобы она разметила и перерисовала это представление и все его подвиды, когда пришло время для цикла обновления. Это асинхронное действие, потому что метод завершается и возвращается немедленно, но только через некоторое время макет и перерисовка действительно происходят, и вы не знаете, когда будет этот цикл обновления.
— layoutIfNeeded()
Напротив, метод layoutIfNeeded - это синхронный вызов, который сообщает системе, что вы хотите создать макет и перерисовать представление и его подвиды, и вы хотите, чтобы это было сделано немедленно, не дожидаясь цикла обновления. Когда вызов этого метода завершен, макет уже скорректирован и нарисован на основе всех изменений, которые были отмечены до вызова метода.
— layoutSubviews()
Реализация по умолчанию использует все ограничения, которые вы установили для определения размера и положения любых вложенных представлений.
719 views13:08