Popover with ModalPresentationStyle is not centered in iOS 7 iPad

前端 未结 6 1370
悲哀的现实
悲哀的现实 2021-01-31 19:18

I have a problem with iOS 7 that seems to be a bug or I just don\'t do something right. I have modalViewController that appears as a popover on iPad with ModalPresentationStyle.

6条回答
  •  南方客
    南方客 (楼主)
    2021-01-31 19:31

    I had the same problem. I have solved this by using another approach, found here.

    What this solution proposes is to use the method (void)viewWillLayoutSubviews

    So in case of @Manuel M. inside the GeneralSettingsViewController add the code below:

    // GeneralSettingsViewController
    - (void)viewWillLayoutSubviews{
        [super viewWillLayoutSubviews];
        self.view.superview.bounds = CGRectMake(0, 0, 497, 375);
    }
    

    And you won't need this code anymore:

    self.generalSettingsVC.view.superview.frame = CGRectMake(0, 0, 497, 375);
    self.generalSettingsVC.view.superview.center = self.view.center;
    

    For @titicaca, you are using a UINavigationController I haven't test it with this Controller but you could try the same solution I mentioned, extending the UINavigationController and overwrite the viewWillLayoutSubviews method.

    [EDIT]

    For @titicaca I tried it in a new project and for me it worked. What I did was having a custom navigation view controller CustomNavigationController overriding the viewWillLayoutSubviewslike this:

    - (void)viewWillLayoutSubviews{
        [super viewWillLayoutSubviews];
        self.view.superview.bounds = CGRectMake(0, 0, 330, 284);
    }
    

    Then, the view controller that presents the CustomNavigationController should execute a code similar to this:

    UIViewController *myVC = [[UIViewController alloc] init];
    [myVC.view setBackgroundColor:[UIColor redColor]];
    
    CustomNavigationController *nav = [[CustomNavigationController alloc] initWithRootViewController:myVC];
    [nav setModalPresentationStyle:UIModalPresentationFormSheet];
    [nav setModalTransitionStyle: UIModalTransitionStyleFlipHorizontal];
    
    [self presentViewController:nav animated:YES completion:nil];
    

    You need to make sure though, that the dimensions of the self.view.superview.bounds = CGRectMake(0, 0, 330, 284); are even numbers otherwise the text inside gets fuzzy, if there is any

提交回复
热议问题