我正在使用Storyboard自动布局。我从单元格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];
弹出窗口以纵向模式显示在iPad上,并带有向上箭头。
我将iPad旋转到横向模式。popoverPresentationController保持相同的sourceView / sourceRect并正确指向该单元格。它也保持向上箭头。
但是它现在在视图的底部,因此弹出窗口的大小调整为较短的高度。这不是所需的行为。
如果弹出框只是移动到新位置并更改箭头方向,则根本不需要调整大小。这是所需的行为。
我认为以下方法可以允许我进行更改,但是由于sourceView rect不会更改,因此未调用它:
- (void)popoverController:(UIPopoverController *)popoverController
willRepositionPopoverToRect:(inout CGRect *)rect
inView:(inout UIView **)view {
}
我尝试过重设allowedArrowDirections(为preferredContentSize,因为这似乎是最合逻辑的地方)。这不起作用(弹出窗口仍会调整大小):
- (CGSize) preferredContentSize {
[super preferredContentSize];
self.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUnknown;
return CGSizeMake(DEFAULT_POPOVER_WIDTH,DEFAULT_POPOVER_HEIGHT);
}
我根本无法找到一种方法来强制popoverPresentationController更改箭头方向并重新定位弹出框,而不是调整弹出框的大小。我开始认为这甚至是不可能的-但我仍然希望我只是想念一些东西。
编辑:在此期间,我想到,如果我不希望它在iPad中调整大小,则弹出窗口不是呈现此视图的最佳方法。我将使用UIModalPresentationFormSheet演示文稿进行尝试。但是我仍然想找到这个问题的答案。
我只是遇到了问题
- (void)popoverController:(UIPopoverController *)popoverController
willRepositionPopoverToRect:(inout CGRect *)rect
inView:(inout UIView **)view {
未被调用,因为我的视图控制器已分离。您的视图层次结构中可能存在一个尚未将其视图控制器添加为子视图控制器的视图。
我认为以下方法可以允许我进行更改,但由于sourceView rect不变,因此未调用
sourceView rect不必更改,只需更改界面方向即可。从UIPopoverControllerDelegate文档中:
对于使用presentPopoverFromRect:inView:permittedArrowDirections:animated:方法呈现的弹出窗口,当界面方向更改时,弹出窗口控制器将调用此方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句