LayoutSubviews vs layoutIfNeeded (Swift 5)

  Рет қаралды 13,495

SwiftBook

SwiftBook

5 жыл бұрын

Всем привет, ребята!
В этом видео мы поговорим о двух очень интересных методах: layoutSubviews() и layoutIfNeeded(), при правильном использовании которые помогают нам избежать ряда проблем, связанные с view layout.
Часто эти проблемы возникают из-за наших неправильных представлений о том, когда обновления view фактически происходят, в какой момент высчитываются constraints, высчитывается размер содержимого и.т.д. И поэтому сегодня я разъясню вам как использовать эти методы для получения желаемого поведения.
Поехали!
Ссылка на проект: github.com/IvanAkulov/iOS-Dem...
Подробнее об изучении Swift вы можете узнать на нашем сайте:
swiftbook.org/
Наш форум, где вы всегда можете задать ваши вопросы:
forum.swiftbook.ru
Присоединяйтесь к нашей группе в "ВКонтакте":
swiftbook
Присоединяйтесь к нашей группе в "facebook":
/ swiftbook.ru
Мы в telegram:
t.me/swiftbook_chat

Пікірлер: 20
@vladpodvoiskyi2307
@vladpodvoiskyi2307 5 жыл бұрын
ну а за видео спасибо! Как всегда полезное и понятное!
@samentyevtriboy4731
@samentyevtriboy4731 5 жыл бұрын
Полезное видио 😀 Теперь буду править проект)
@user-ks9vq3ms8e
@user-ks9vq3ms8e 5 жыл бұрын
Огромное спасибо за видео!
@vladpodvoiskyi2307
@vladpodvoiskyi2307 5 жыл бұрын
13.22-13.44 надо бы рэпом зачитать)))
@synevir1603
@synevir1603 4 жыл бұрын
Было бы круто если бы вы сняли курс про то как правильно создавать no storyboard проекты, views & subviews, controllers & childcontrollers, constrains в коде и вообще в целом рассказать про архитектуру вьюх было бы очень интересно. Так же по RxSwift был бы очень интересный курс
@SwiftBook
@SwiftBook 4 жыл бұрын
У нас такие технологии разбираются в курсе VK News Feed App, посмотри
@b0ss1987
@b0ss1987 5 жыл бұрын
Спасибо за видео, как всегда во время, как раз была проблема с этим! Буду очень благодарен если подскажете как сделать что бы collection view отображал картинку в полный размер с правильным соотношением сторон, не зависимо от ориентации самого изображения
@etronik3339
@etronik3339 Жыл бұрын
итоги 16:05 Алексей, Спасибо!
@vietho2512
@vietho2512 5 жыл бұрын
1) Нужно ли делать [weak self] в блоке animate? 2) зачем два раза писать layoutifneeded?
@vietho2512
@vietho2512 5 жыл бұрын
Алексей Пархоменко можешь сделать видос когда надо, а когда не надо использовать weak self?
@user-mx6hg8vx5o
@user-mx6hg8vx5o 3 жыл бұрын
Я правильно поняла, что в UIVIew.animate {} когда мы перемещали centerX, то layoutSubviews вызывался автоматически.Но когда в этом блоке увеличивали констрейнт, layoutSubviews сам по себе не вызывался и поэтому мы писали layoutIfNeeded, чтобы косвенно вызвать layoutSubviews (который в свою очередь высчитывает фреймы на основе констрейнтов)Заранее спасибо за ответ, очень важно понять 🙏🏻
@vladislavwhatislove7156
@vladislavwhatislove7156 2 жыл бұрын
1000 лайков
@shurale85
@shurale85 7 ай бұрын
все же не раскрыта причина того, что же приводит к вызову метода layoutSubviews на 6 минуте, и изменения констрейнта указанные в этом методе имеют результат. Ведь размеры , констрейнты не менялись. Почему layoutSubviews вызвался?
@SwiftBook
@SwiftBook 7 ай бұрын
При появлении VC одним из методов ЖЦ VC будет вызван метод viewDidLoayoutSubViews, который у своего главного view у всех его сабвьюх будет вызывать метод layoutSubviews(), также этот метод ЖЦ (viewDidLoayoutSubViews) будет срабатывать когда меняются размеры главного view VC, например когда устройство будет перевернуто.
@user-wp9lc1nz6y
@user-wp9lc1nz6y 5 жыл бұрын
cornerRadius не сработал во viewDidLoad() потому что в него записали ноль. В тот момент ширина квадрата ещё не была высчитана поэтому frame.width вернул 0. Если бы автор ролика передал туда константное значение, то все бы заработало.
@vadim_polovoi
@vadim_polovoi 2 жыл бұрын
@@user-iv8ci1ml4q Алексей, добрый день. На 6:15 было сказано, что после работы LayoutSubviews срабатывает метод ViewDidLayoutSubviews во VC. Но когда я сам решил это проверить и переопределил все методы жизненного цикла VC, чтобы они выводили в консоль своё имя при запуске, то метод LayoutSubviews срабатывал уже после ViewDidLayoutSubviews.
@shurale85
@shurale85 7 ай бұрын
@@vadim_polovoi а вы не разобралсиь, почему на 6 минуте вызвался layoutSubview (и изменения констрейнтов применились).Что было триггером
@vadim_polovoi
@vadim_polovoi 7 ай бұрын
@@shurale85 когда мы в данном примере указываем constraints для нашей subview в методе ViewDidLoad, то они применяются для нее не сразу и Frame этой вьюшки соответственно нулевой еще из-за этого. Они гарантированно применятся, когда вызовется метод viewDidLayoutSubviews (это и есть сигнальный метод viewController , который прямо об этом и говорит, что constraints для subviews применились). В данном случае никаких триггеров дополнительных не надо, чтобы запустить этот процесс применения constraints, т.к. указание этих констреинтов в коде и есть сам по себе первоначальный триггер, чтобы была необходимость применить эти ограничения.
@shurale85
@shurale85 7 ай бұрын
@@vadim_polovoi класс, спасибо!
Google авторизация/sign-in через CocoaPods
15:45
Child View Controller (Swift 5)
18:46
SwiftBook
Рет қаралды 8 М.
路飞被小孩吓到了#海贼王#路飞
00:41
路飞与唐舞桐
Рет қаралды 67 МЛН
HOW DID HE WIN? 😱
00:33
Topper Guild
Рет қаралды 40 МЛН
Combine. Введение в фреймворк
21:46
SwiftBook
Рет қаралды 14 М.
Dependency Injection
15:31
SwiftBook
Рет қаралды 15 М.
KVO Key-Value Observing и KVC Key-Value Coding
16:28
SwiftBook
Рет қаралды 9 М.
Hashable. Big O notation.
15:06
SwiftBook
Рет қаралды 9 М.
Жизненный цикл UIViewController (Swift 4)
17:23
SwiftBook
Рет қаралды 21 М.
路飞被小孩吓到了#海贼王#路飞
00:41
路飞与唐舞桐
Рет қаралды 67 МЛН