I have a custom view that's not getting layoutSubview
messages during animation.
I have a view that fills the screen. It has a custom subview at the bottom of the screen that correctly resizes in Interface Builder if I change the height of the nav bar. layoutSubviews
is called when the view is created, but never again. My subviews are correctly laid out. If I toggle the in-call status bar off, the subview's layoutSubviews
is not called at all, even though the main view does animate its resize.
Under what circumstances is layoutSubviews
actually called?
I have autoresizesSubviews
set to NO
for my custom view. And in Interface Builder I have the top and bottom struts and the vertical arrow set.
Another part of the puzzle is that the window must be made key:
[window makeKeyAndVisible];
of else the subviews are not automatically resized.
Best Answer
I had a similar question, but wasn't satisfied with the answer (or any I could find on the net), so I tried it in practice and here is what I got:
init
does not causelayoutSubviews
to be called (duh)addSubview:
causeslayoutSubviews
to be called on the view being added, the view it’s being added to (target view), and all the subviews of the targetsetFrame
intelligently callslayoutSubviews
on the view having its frame set only if the size parameter of the frame is differentlayoutSubviews
to be called on the scrollView, and its superviewlayoutSubview
on the parent view (the responding viewControllers primary view)layoutSubviews
on its superview (Important: views with an intrinsic content size will re-size if the content that determines their size changes; for example, updating the text on a UILabel will cause the intrinsic content size to be updated and thus calllayoutSubviews
on its superview)My results - http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/