为啥这个 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 崩溃
iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃