带有UINavigationController的UIPopoverController子视图contentSizeForViewInPopover不适用于Parent

Abb*_*ore 16 iphone resize uipopovercontroller

我有一个带有子类UINavigationController的UIPopoverController.父视图和子视图都是UITableviews.

当我最初使用contentSizeForViewInPopover =(320,480)调用父视图时,它工作得很好.

当我点击子视图时,我将popover调整为contentSizeForViewInPopover =(320,780)

当返回到父视图时,我无法让popover调整大小,返回到contentSizeForViewInPopover =(320,480).popover保持在(320,780)大小.

一直在尝试一切,只是遗漏了一些东 在上面的场景中,任何人都知道如何使用UIPopoverControllers调整视图大小?

提前致谢!!

cri*_*per 24

contentSizeForViewInPopover视图控制器的属性仅设置其包含的默认(初始)大小UIPopoverController.要UIPopoverController在任意时间调整大小,必须设置其popoverContentSize属性.请注意,这popoverContentSize是视图控制器的属性UIPopoverController不是视图控制器的属性(因此您可能需要对弹出控制器的引用).

要在每次视图控制器成为a的顶视图控制器时重置弹出框的大小UINavigationController,您可以使用UINavigationControllerDelegate协议方法:

navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == viewControllerToResize) {
        referenceToUIPopoverController.popoverContentSize = CGSizeMake(320,480);
    }
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*k H 13

我有同样的问题,但上述解决方案都不适合我.然而,在尝试结合他们的方法时,我受到启发,尝试以稍微不同的方式来解决问题.这对我有用:

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    viewController.contentSizeForViewInPopover = navigationController.topViewController.view.frame.size;
}
Run Code Online (Sandbox Code Playgroud)

我有三个不同的popovers,每个使用导航视图控制器.这个解决方案具有很好的副作用,因为它不会对任何弹出控制器进行特定的引用,但最终会使用当前正在使用的弹出控制器中的popoverContentSize.