Ios8 是否可以强制UIPopoverPresentationController重新定位popover而不是调整其大小?

Ios8 是否可以强制UIPopoverPresentationController重新定位popover而不是调整其大小?,ios8,autolayout,uipopovercontroller,uipopover,uipresentationcontroller,Ios8,Autolayout,Uipopovercontroller,Uipopover,Uipresentationcontroller,我正在使用自动布局与故事板。我从cell rect提供popoverPresentationController: NumberController * viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NumberController"]; UIPopoverPresentationController *pc = [viewController popoverPresentationCont

我正在使用自动布局与故事板。我从cell rect提供popoverPresentationController:

NumberController * viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NumberController"];
UIPopoverPresentationController *pc = [viewController popoverPresentationController];
    pc.delegate = self;
    pc.permittedArrowDirections = UIPopoverArrowDirectionAny;
    pc.sourceView = tableView;
    pc.sourceRect = [tableView rectForRowAtIndexPath:indexPath];
    [self.navigationController presentViewController:viewController animated:animated completion:nil];
popover以纵向模式出现在iPad上,箭头朝上

我将iPad旋转到横向模式。popoverPresentationController保持相同的sourceView/sourceRect并正确指向单元格。它还保持向上箭头

但它现在位于视图的底部,因此popover将调整到较短的高度。这不是期望的行为

如果popover只是移动到一个新位置并更改箭头方向,则根本不需要调整大小。这是理想的行为

我认为以下方法可能允许我进行更改,但由于sourceView rect没有更改,因此没有调用它:

- (void)popoverController:(UIPopoverController *)popoverController
willRepositionPopoverToRect:(inout CGRect *)rect
                   inView:(inout UIView **)view {

}
我试图重置PermittedRowDirections(在preferredContentSize中,因为这似乎是最符合逻辑的地方)。这不起作用(popover仍会调整大小):

我无法找到一种方法来强制popoverPresentationController更改箭头方向并重新定位popover,而不是调整popover的大小。我开始认为这是不可能的,但我仍然希望我只是错过了一些东西


编辑:在此期间,我突然想到,如果我不想在iPad上调整它的大小,也许popover不是展示这个视图的最佳方式。我将尝试使用UIModalPresentationFormSheet演示。但是我仍然想找到这个问题的答案。

我刚刚遇到了一个问题,在哪里

    - (void)popoverController:(UIPopoverController *)popoverController
    willRepositionPopoverToRect:(inout CGRect *)rect
               inView:(inout UIView **)view {
未调用,因为我的视图控制器已分离。视图层次结构中可能有一个视图的视图控制器尚未添加为子视图控制器

我认为下面的方法可能允许我进行更改,但它没有被调用,因为sourceView rect没有更改

sourceView矩形不必更改,只需更改接口方向即可。从UIPopoverControllerDelegate文档:

对于使用presentPopoverFromRect:inView:permittedArrowDirections:animated:方法显示的popover,当界面方向更改时,popover控制器将调用此方法

    - (void)popoverController:(UIPopoverController *)popoverController
    willRepositionPopoverToRect:(inout CGRect *)rect
               inView:(inout UIView **)view {