MFSideMenu
MFSideMenu copied to clipboard
Incorrect display on landscape on iOS 7
The view opens as in Portrait when you open it in Landscape on iOS 7 :
How to replicate it:
Start in landscape mode.
Have a table view on the leftMenuViewController and in didSelectRowAtIndexPath: change the centerViewController property of the MFSideMenu with another controller and this is what it shows after you dismiss the left view:

I have solved it with this code. I'm not very proud but I've not had too much time to find a better solution.
- (void)setCenterViewController:(UIViewController *)centerViewController { [self removeCenterGestureRecognizers]; [self removeChildViewControllerFromContainer:_centerViewController]; self.shadow = nil;
// NSLog(@"%@", NSStringFromCGPoint([_centerViewController view].frame.origin)); // NSLog(@"%@", NSStringFromCGSize([_centerViewController view].frame.size));
CGPoint origin = ((UIViewController *)_centerViewController).view.frame.origin;
CGSize size = ((UIViewController *)_centerViewController).view.frame.size;
_centerViewController = centerViewController;
if(!_centerViewController) return;
[self addChildViewController:_centerViewController];
[self.view addSubview:[_centerViewController view]];
if (size.width == 0) {
size = centerViewController.view.frame.size;
}
[((UIViewController *)_centerViewController) view].frame = (CGRect){.origin = origin, .size=size};
// NSLog(@"%@", NSStringFromCGPoint([_centerViewController view].frame.origin)); // NSLog(@"%@", NSStringFromCGSize([_centerViewController view].frame.size));
[_centerViewController didMoveToParentViewController:self];
self.shadow = [MFSideMenuShadow shadowWithView:[_centerViewController view]];
[self.shadow draw];
[self addCenterGestureRecognizers];
}
Hi, I had the same problem.
Here is my final version of setCenterViewController
-
(void)setCenterViewController:(UIViewController *)centerViewController { [self removeCenterGestureRecognizers]; [self removeChildViewControllerFromContainer:_centerViewController]; self.shadow = nil;
CGPoint origin = ((UIViewController *)_centerViewController).view.frame.origin; _centerViewController = centerViewController; if(!_centerViewController) return;
[self addChildViewController:_centerViewController]; [self.view addSubview:[_centerViewController view]]; CGRect newFrame; UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; if (UIDeviceOrientationIsLandscape(orientation)) { newFrame = CGRectMake(origin.x, origin.y, centerViewController.view.frame.size.height, centerViewController.view.frame.size.width); } else { newFrame = CGRectMake(origin.x, origin.y, centerViewController.view.frame.size.width, centerViewController.view.frame.size.height); } [((UIViewController *)_centerViewController) view].frame = newFrame;
[_centerViewController didMoveToParentViewController:self];
self.shadow = [MFSideMenuShadow shadowWithView:[_centerViewController view]]; [self.shadow draw]; [self addCenterGestureRecognizers]; }