21

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.

memmons
  • 40,222
  • 21
  • 149
  • 183

3 Answers3

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