layoutIfNeeded is a synchronous call that will let the system update the views and force the layout engine to redraw the views. setNeedsLayout is a deferred call and asynchronous call that will mark the layout has changed but it will call layoutSubViews() in the next cycle. Both layoutIfNeeded and setNeedsLayout call layoutSubViews()
![](https://private-user-images.githubusercontent.com/40764138/292913783-86f76c00-80af-45e0-b65e-e7f8182620f8.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDAyMDgsIm5iZiI6MTczOTU5OTkwOCwicGF0aCI6Ii80MDc2NDEzOC8yOTI5MTM3ODMtODZmNzZjMDAtODBhZi00NWUwLWI2NWUtZTdmODE4MjYyMGY4LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2MTE0OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkMzA1MDRiMGFiMzU2NTY3Y2I5Zjk0ZGY4MDUxYzAyYzk2MDUyYTk4ZDNlYmFlMzUxOTAxZDQ5MjQwMGUxYmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gdhvciTARzjzJxrEYITcAVSVua98-W6wlWbXVHmxjF8)
![](https://private-user-images.githubusercontent.com/40764138/292913844-aeaa8fb4-3a2d-4c28-85ad-b63d1444c66e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDAyMDgsIm5iZiI6MTczOTU5OTkwOCwicGF0aCI6Ii80MDc2NDEzOC8yOTI5MTM4NDQtYWVhYThmYjQtM2EyZC00YzI4LTg1YWQtYjYzZDE0NDRjNjZlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2MTE0OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRkOTNiNzcyNjgxYTQ3NmIwNWY5ZTA5OGExMDRhY2NhZjUxODhiNTFmMjdiNDFlOTY4ZmQ0YTlmZjZkNTYzODImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.n1ZrytGMmF6ZIdHyqf0z5wzLU2wxDVy7FAYu-rrD4k0)