I am subclassing a UIView and overwrite the drawRect method. I'm noticing that the view's drawrect is only being called when the view first loads. After that it is never called again. How to I make sure it gets called after an orientation change? I've tried calling setNeedsDisplay on the view before and after the rotation and that doesn't do it.
Asked
Active
Viewed 9,848 times
3 Answers
60
[myView setContentMode:UIViewContentModeRedraw];
You can set this in IB as well (i.e., set mode to "redraw")

wcochran
- 10,089
- 6
- 61
- 69
-
See the original author's response below. setNeedsDisplay is indeed the right method call. – Madhav Sbss Mar 13 '14 at 10:23
-
4`setNeedsDisplay:` is used when you want to programmatically trigger a redraw. When you want orientation changes to trigger a redraw then `setContentMode:` is the ticket. – wcochran Jun 24 '14 at 16:46
9
This was a bug related to something completely different. setNeedsDisplay does indeed cause drawRect to be called.

memmons
- 40,222
- 21
- 149
- 183
-
Yes `setNeedsDisplay:` will trigger a redraw, but requires the programmer to explicitly invoke it. 'setContentMode:` will automagically trigger a redraw on an orientation change. – wcochran Jun 24 '14 at 16:48
0
to answer this and the other 94,000 similiar questions about view rotation/drawrect funkiness,
-(id)initWithFrame:(CGRect)frame
{
if(self=[super initWithFrame:frame]) {
self.autoresizesSubviews=YES;
self.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
}
return self;
}

Mark
- 25
- 2