我正在尝试使用新的UIPopoverPresentationController
来显示一个小模态弹出窗口,虽然它或多或少有效,但它所包含的弹出式冒泡以非常奇怪的方式切断:
看起来底部缺少一块,但我无法弄清楚原因。
以下是我用来呈现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];
答案 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屏幕尺寸上为我修复它。