按钮中的 presentPopoverFromRect 超出范围
Posted
技术标签:
【中文标题】按钮中的 presentPopoverFromRect 超出范围【英文标题】:presentPopoverFromRect from a button goes out of bounds 【发布时间】:2012-08-01 21:56:46 【问题描述】:所以我使用WEPopover 来显示自定义视图控制器弹出窗口。我有一个 UIView,其中有另一个 UIView,称为 containerView。在这个 containerView 里面,我有一个 UIButton。这就是我想展示我的popover的地方。所以这就是我所做的:
[self.popoverDialog presentPopoverFromRect:sender.frame inView:self.containerView permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
问题是箭头和所有内容都通过此按钮显示,但弹出框超出了 self.containerView 的范围。如何使弹出框显示在 containerView 范围内?
编辑:
一张图抵得上一千个字,所以这里是: 浅灰色的是我上面提到的containerView。理论上,弹出框应该显示在不会超出的浅灰色范围内。
【问题讨论】:
【参考方案1】:对于包含在弹出框内的视图,转到它的视图控制器并设置它的属性 contentSizeForViewInPopover。您可以在此处设置大小,使其适合您的 containerView 的边界。
OP 希望定位弹出框,使其仅显示在他的容器视图中。我在 WEPopoverController.m 文件中找到了这段代码
- (void)repositionPopoverFromRect:(CGRect)rect
inView:(UIView *)theView
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
CGRect displayArea = [self displayAreaForView:theView];
WEPopoverContainerView *containerView = (WEPopoverContainerView *)self.view;
[containerView updatePositionWithAnchorRect:rect
displayArea:displayArea
permittedArrowDirections:arrowDirections];
popoverArrowDirection = containerView.arrowDirection;
containerView.frame = [theView convertRect:containerView.frame toView:backgroundView];
您可以调用此方法,它可能会重新定位您的弹出框,使其现在位于您的容器视图中。
【讨论】:
我已经这样做了..尺寸很好..但只是想保持那个尺寸,这样它就不会超出范围 您能提供一张图片吗?我很难理解你所说的越界是什么意思。它仍然完全在屏幕内吗? 啊,有道理。因此,您可以做的不是从发送者的框架中显示弹出框,而是可以创建一个偏移的 CGRect。问题是弹出框的箭头来自它的中心。我正在尝试寻找一种可以进行此偏移并使箭头更向右的方法。你知道 WEPopover 中有没有这样的方法吗? 嗯...我不认为有任何这样做。我实际上确实创建了那个 CGRect 而不是从发件人那里呈现它,但是正如你提到的箭头不在正确的位置 我在 WEPopover 的文档中发现了这一点“支持限制显示弹出框的区域:为您提供给 presentPopover 方法的视图实现协议 WEPopoverParentView 并实现 - (CGRect)displayAreaForPopover。”也许你可以试试看。以上是关于按钮中的 presentPopoverFromRect 超出范围的主要内容,如果未能解决你的问题,请参考以下文章
Jumbotron 中的按钮链接到 React 导航栏中的按钮
行未更新 - 对话框中的更新按钮(由 dataTable 中的按钮打开)
如何为 django 模板中的单个按钮的 for 循环中的按钮提供唯一 id?
c# toolStrip 中的按钮toolStripButton