There is a small set of standard methods that allow for very flexible and state management. The concept is similar to how does rendering and state updates — a bit more about that later. UIKit layout React So this is how I do it, starting with a . Basically, I put all view layout logic in . This method is particularly suited for handling layouts since automatically called: UIViewController viewDidLayoutSubviews When view is first loaded When the view frame changes When we call view.setNeedsLayout() This is exactly what we want. Let’s at the code below. We create the button, add it to the view and put our layout logic in . viewDidLayoutSubviews Whenever we want to re-layout or change the state we just update the controller state and then call again. I think this is so simple and powerful. It makes it easy to work with complex layouts and state changes. view.setNeedsLayout So let’s look at another example where we actually have some state in the view controller - a that holds the number of times the button has been tapped. We also want to update the button title in to reflect the current count. Whenever the button is tapped the is increased and the view is updated. tapCount viewDidLayoutSubviews tapCount This is very similar to how works. You update the state and trigger a re-render. So the corresponds to the React method, and setting an instance variable and calling corresponds to React This concept works very well in React and I believe it works just as well here. React viewDidLayoutSubviews then render setNeedsLayout setState. For a this works pretty much the same way, but using instead of . Whenever you want to re-render just call . UIView layoutSubviews viewDidLayoutSubviews setNeedsLayout Note: When calling the view is not updated immediately. It waits for the next update cycle. If you want to force an update you call right after. setNeedsLayout layoutIfNeeded This is pretty much it it. I really like this way of doing layout and state management and I’ve been using it successfully in many projects.