5

UINavigationController在里面使用UIPopoverController

-(void)showEditMenuFrom:(UIButton *)button{
    if (self.popover) {
        [self.popover dismissPopoverAnimated:YES];
        self.popover = nil;
    }
    else {
        EditMenuViewController *editMenuViewController = [[EditMenuViewController alloc] initWithNibName:@"EditMenuViewController" bundle:nil];

        UINavigationController *actionsNavigationController = [[UINavigationController alloc] initWithRootViewController:editMenuViewController];
        actionsNavigationController.delegate = self;

        // switch for iPhone and iPad.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            self.popover = [[UIPopoverController alloc] initWithContentViewController:actionsNavigationController];
            self.popover.delegate = self;
            //            CGRect presentFrame = CGRectMake(button.frame.origin.x-43, button.frame.origin.y-10, button.frame.size.width, button.frame.size.height);
            [self.popover presentPopoverFromRect:button.frame inView:button permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        } else {
            [self presentViewController:actionsNavigationController animated:YES completion:^{
                NSLog(@"Activity complete");
            }];
        }
    }

    }

我尝试UIPopover在导航时调整内部视图的大小,结果如下:

  1. 根视图:

在此处输入图像描述

2.推送到其他VC

在此处输入图像描述

3.弹回:

在此处输入图像描述

您可以看到根 VC 的高度无法更改回原始大小。

我尝试设置contentSizeForViewInPopoverinviewDidAppearviewDidLoadinUINavigationControllerDelegate但没有任何方法有效

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    NSLog(@"Show VIEW %@",viewController);
    if ([viewController isKindOfClass:[EditMenuViewController class]]) {
        viewController.contentSizeForViewInPopover = CGSizeMake(160.0, 160.0);
    } else {
        viewController.contentSizeForViewInPopover = CGSizeMake(320.0, 320.0);
    }
}

如何解决这个问题呢?谢谢!

4

2 回答 2

2

对于满足此解决方案的人,我结束了我的问题:

首先,您需要在 VC 中声明一个@property,它会弹回堆栈

@property (nonatomic, strong) UIPopoverController *popover;

然后在主代码中将其分配给 UIPopoverController

self.popover = [[UIPopoverController alloc] initWithContentViewController:actionsNavigationController];
self.popover.delegate = self;

editMenuViewController.popover = self.popover;

最后,在要调整大小的 VC 的 viewWillAppear 中设置大小

-(void)viewWillAppear:(BOOL)animated
{
    [self.popover setPopoverContentSize:CGSizeMake(160,160)];
    self.contentSizeForViewInPopover = CGSizeMake(160,160);
    [super viewWillAppear:animated];
}
于 2013-07-30T14:07:31.623 回答
1

试试下面的例子可能有用: -

-(void)showEditMenuFrom:(UIButton *)button{
    if (self.popover) {
        [self.popover dismissPopoverAnimated:YES];
        self.popover = nil;
    }
    else {
        EditMenuViewController *editMenuViewController = [[EditMenuViewController alloc] initWithNibName:@"EditMenuViewController" bundle:nil];

        UINavigationController *actionsNavigationController = [[UINavigationController alloc] initWithRootViewController:editMenuViewController];
        actionsNavigationController.delegate = self;

        // switch for iPhone and iPad.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            self.popover = [[UIPopoverController alloc] initWithContentViewController:actionsNavigationController];
            self.popover.delegate = self;

            popover.popoverContentSize =CGSizeMake(250,200); //Addint this line for setContentsize


            [self.popover presentPopoverFromRect:button.frame inView:button permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        } else {
            [self presentViewController:actionsNavigationController animated:YES completion:^{
                NSLog(@"Activity complete");
            }];
        }
    }

    }

EditMenuViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //self.clearsSelectionOnViewWillAppear = NO; //this work if superclass is UITableviewcontroller
     self.contentSizeForViewInPopover = CGSizeMake(200,100);
}

-(void)viewWillDisappear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(250,200);
    [super viewWillDisappear:YES];
}

添加

检查一些与您的问题类似的有用信息:-

在 iPad 上的弹出窗口中推送导航视图控制器时动画 popoverContentsize

UIPopoverController 在 pushViewController 上自动调整到最大高度

在 uipopovercontroller 中推送一个新的 tableViewController 会导致调整弹出框的大小

带有嵌入式导航控制器的弹出框不考虑后导航的大小

于 2013-07-30T10:16:37.113 回答