40media How is layoutIfNeeded used?

How is layoutIfNeeded used?

When and how is layoutIfNeeded used? I know that when we change the layout of a view, we can call setNeedsLayout to update the layout but not sure when layoutIfNeeded should be used.

NOTE: I have layoutIfNeeded used in actual code but forgot in what context it was used.

Select Multiple Images (UIImagePickerController or Photos.app Share UI)


Read and update a Dictionary type PSMultiValueSpecifier from NSUserDefault
layoutIfNeeded forces the receiver to layout its subviews immediately if required..
passing object from iphone app to library in object C
Suppose you have overridden layoutSubviews, and UIKit feels that your view requires layout for whatever reason (e.g.

Stretching An Image in Tableview
you called setNeedsLayout when handling some user action).

UIWebView and Javascript from button
Then, your custom layoutSubviews method will be called immediately instead of when it would normally be called in the regular UIKit run loop event sequence (after event handling, but before drawRect:)..
sectioned UITableView
An example of why you might need to call layoutIfNeeded within a single run loop:.
Cocoa-touch - implementation files?
  1. You resize a custom view containing a table view with a custom layout.

    Run javascript without UIWebView possible?
    setNeedsLayout is set so that layoutSubviews will be called later.
  2. A controller object asks the table view to scroll to some particular cell when handling a user event.
  3. Your custom view performs some custom sizing of the table view in layoutSubviews that changes the table view size.
The problem is when the controller asked the table view to scroll (step 2), the table view had bounds that were stale.

The updated bounds would only be set on the table view later (step 3).

What the controller wanted the table view to scroll to may not actually be visible after layoutSubviews is done.

A solution then would be for the controller to call layoutIfNeeded in situations where it knows this might occur..


setNeedsLayout actually calls layoutIfNeeded, so if your calling setNeedsDisplay there's no reason to call layoutIfNeeded.

In this way setNeedsLayout is a convenience method for calling layoutIfNeeded which does the heavy lifting..

70 out of 100 based on 80 user ratings 730 reviews