I'm trying to create a custom layout for some subviews. My file is a ViewController, so I have to refer to its view as self.view. The subviews are subviews of self.view.
When I call [self layoutSubviews]; explicitly in viewDidLoad, it will execute the code in -layoutSubviews without a problem.
However, I've read that I shouldn't call -layoutSubviews explicitly, or call it on self since that's a UIViewController. I tried implementing -setNeedsLayout by calling it like this: [self.view setNeedsLayout] in viewDidLoad, and taking out the explicit call of -layoutSubviews but keeping its declaration. But that didn't seem to work.
I was linked to an article about when layoutSubviews is called and it seems like it should be called when I add subviews, but that doesn't seem to be happening here.
If I want to be safe, and do things the way it suggests in the class reference for UIView and its methods, how should I go about being able to use both methods?
You should never call
-layoutSubviewsdirectly. It might be detrimental to performance, but other reasons might as well apply. Instead call-setNeedsLayout. This method sets a flag (or Boolean) that on some next drawing pass the-layoutSubviewsmethod should be called (several methods might set this flag, but it won't force a redraw until the time is right).Does your
-layoutSubviewsimplementation call-layoutSubviewson the super class?Perhaps you should show some code so we might help you further with this issue.