为啥这个 popover segue 以 UITableViewController 为中心?

Posted

技术标签:

【中文标题】为啥这个 popover segue 以 UITableViewController 为中心?【英文标题】:Why is this popover segue centered from a UITableViewController?为什么这个 popover segue 以 UITableViewController 为中心? 【发布时间】:2015-04-23 15:15:13 【问题描述】:

我花了很长时间尝试从 tableview 创建一个居中的弹出框。我最终设法让它工作:

(我认为...)这些步骤:

    将 segue 锚定到表视图 在表视图控制器上设置“使用首选显式大小”: 取消选中 segue 属性检查器中的所有“方向”选项。

    使用以下方法在我的 UITableViewController 中实现 UIPopoverPresentationControllerDelegate 协议:

    func 自适应PresentationStyleForPresentationController(控制器:UIPresentationController)-> UIModalPresentationStyle 返回。无

现在,我想我不明白为什么这行得通。

如果我选中任何“方向”选项,则弹出框将显示在屏幕外。这是因为弹出框位于视图之外(当前占据了全屏)吗?锚点是如何确定的?

是否建议使用首选的显式尺寸?

【问题讨论】:

【参考方案1】:

使用UITableView 作为锚点意味着当您使用箭头时,箭头将定位到对象的边缘,然后,正如您所推测的那样,在屏幕外显示 segued-to view 控制器。

如果您想要箭头,而不是将 segue 绑定到 UITableView,您可以像我一样(按照另一个 Stack Overflow 帖子的提示)并在表格视图后面放置一个隐藏的锚按钮。然后当你触摸一个单元格时,将按钮移动到触摸点,然后执行 segue。

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
CGPoint tapPoint = CGPointMake(cell.frame.origin.x + cell.frame.size.width - (self.hiddenAnchorButton.frame.size.width / 2),
                                cell.center.y + self.tableView.frame.origin.y - self.tableView.contentOffset.y);
self.hiddenAnchorButton.center = tapPoint;

[self performSegueWithIdentifier:@"yourSegueName" sender:cell];

【讨论】:

以上是关于为啥这个 popover segue 以 UITableViewController 为中心?的主要内容,如果未能解决你的问题,请参考以下文章

转换为使用 iOS 8 Popover Segues 时 UISplitViewController 崩溃

Segue Popover 无法正常运行

从 popover segue 推送 segue 不起作用

popover带箭头弹框

我看不到popover segue

iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃