UIPopoverPresentationController无法正确呈现

时间:2015-06-07 20:17:19

标签: objective-c ios8 uipopovercontroller

我正在尝试使用新的UIPopoverPresentationController来显示一个小模态弹出窗口,虽然它或多或少有效,但它所包含的弹出式冒泡以非常奇怪的方式切断:

enter image description here

看起来底部缺少一块,但我无法弄清楚原因。

以下是我用来呈现popover的代码(请注意,sourceView位于inputAccessoryView上):

UIViewController *popoverVC = [self.storyboard instantiateViewControllerWithIdentifier:@"profilePopover"];
popoverVC.preferredContentSize = CGSizeMake(300,120);
popoverVC.modalPresentationStyle = UIModalPresentationPopover;
self.profilePopoverController = popoverVC.popoverPresentationController;
self.profilePopoverController.delegate = self;
self.profilePopoverController.sourceView = self.chatBar.profilePictureButton;
self.profilePopoverController.sourceRect = self.chatBar.profilePictureButton.bounds;
self.profilePopoverController.permittedArrowDirections = UIPopoverArrowDirectionDown;
popoverVC.modalPresentationStyle = UIModalPresentationPopover;
[self presentViewController:popoverVC animated:YES completion:nil];

1 个答案:

答案 0 :(得分:0)

当我从segue展示自己的popover时,我遇到了这个问题,每当我想到我修复它时,它就会再次出现。

我想我终于得到了它。它似乎与目标控制器preferredContentSize和弹出控制器sourceRect中的值有关。内容大小是我必须调整最多的内容。

如果尺寸值不是积分(例如,它必须是2.0而不是2.5),或者如果它们不均匀(因此它可以是2.0而不是1.0),则会发生这种情况。我已经准备好了我为segue方法做准备的地方。我希望我的popover大小与我的视图的总大小有关,但这不仅适用于该场景。我的按钮大小(sourceRect)是固定的,因此我的测量结果无需进行类似的调整即可正常工作,但我也猜测同样的限制。

if let button = sender as? UIButton where segue.identifier == "FAQSegue" {
    let fullViewSize = self.view.bounds

    let controller = segue.destinationViewController
    let popoverController = controller.popoverPresentationController
    popoverController?.delegate = self
    var w = round(fullViewSize.width * 0.85)
    var h = round(fullViewSize.height * 0.85)
    w = (w % 2 == 0) ? w : w + 1
    h = (h % 2 == 0) ? h : h + 1
    controller.preferredContentSize = CGSize(width: w, height: h)

    // Set arrow position to middle of button
    popoverController?.sourceRect = CGRectMake(button.bounds.width / 2.0, 5.0, 0.0, 0.0)
}

我无法肯定地说这些是这个问题的唯一触发因素,但它最终会在所有iPhone屏幕尺寸上为我修复它。