MFSideMenu icon indicating copy to clipboard operation
MFSideMenu copied to clipboard

Incorrect display on landscape on iOS 7

Open danipralea opened this issue 12 years ago • 2 comments

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:

ios simulator screen shot 31 oct 2013 10 19 27 ios simulator screen shot 31 oct 2013 10 19 25

danipralea avatar Oct 31 '13 08:10 danipralea

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];

}

vjberenguer avatar Apr 11 '14 16:04 vjberenguer

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]; }

jerydarkside avatar Jul 10 '14 13:07 jerydarkside