在 iPad 中居中 uipopover
Posted
技术标签:
【中文标题】在 iPad 中居中 uipopover【英文标题】:centering a uipopover in iPad 【发布时间】:2010-11-19 18:50:34 【问题描述】:我想为 iPad 创建一个新键盘。
我设计了一个视图,该视图具有键和所有底层工作以在用户按下键时填充文本框,并在用户按下返回按钮时将值传递回调用例程。
一切正常。
现在 - 我想将此视图创建为弹出框。
我已经完成了基本操作(弹出并被关闭)
但现在我需要一些微调帮助。
这是我的问题......
1) 如何在没有 UIPopoverArrowDirectionAny 选择的情况下创建一个以屏幕为中心的弹出窗口?
2) 确保弹出窗口的大小是我在 XIB 文件中创建的大小(目前,它会调整大小并删除窗口最右边的一些大小)
谢谢 托尼
【问题讨论】:
【参考方案1】:要在没有箭头的情况下显示它,请为“permittedArrowDirections”传递 0:
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];
要使其居中,请传递一个位于视图中心的 1x1 矩形:
CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1);
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];
然后你有一个居中且无箭头的弹出框。
关于移除箭头的部分可能随时中断。他们没有提供 UIPopoverArrowDirectionNone 选项是有原因的,他们可能会选择在将来通过 0 时抛出异常,或者默认为某些东西。使用它需要您自担风险。
【讨论】:
对于横向模式下的 iPad,我必须切换 CGRectMake 的宽度和高度才能正确居中。 也适用于 ios 7.0.x。 快速使用 UIPopoverArrowDirection.allZeros 删除箭头【参考方案2】:如果您使用的是 UIPopoverController,它将有一个箭头。这是您的选择。
UIPopoverArrowDirectionAny
UIPopoverArrowDirectionUp
UIPopoverArrowDirectionDown
UIPopoverArrowDirectionLeft
UIPopoverArrowDirectionRight
如你所见,没有 UIPopoverArrowDirectionNone
至于XIB大小,在你的ViewDidLoad方法的实现文件中,可以设置如下。
self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0);
您可以随意设置弹出框的大小。
【讨论】:
是的,但如果你硬编码一个 0 就像 UIPopoverArrowDirectionNone【参考方案3】:我刚刚完成了这个,但想在故事板中做尽可能多的事情,这会稍微改变方法:
1) 选择情节提要中的弹出框并取消勾选上/下/左/右方向以摆脱箭头。
要将它集中在屏幕覆盖上,为 segue 做准备并执行以下操作:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue;
CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width) / (CGFloat)2.0;
CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height) / (CGFloat)2.0;
popover.popoverController.popoverLayoutMargins =
UIEdgeInsetsMake(
verticalInset,
horizontalInset,
verticalInset,
horizontalInset);
在我的例子中,我还发现 popover segue 的圆角半径与我的设计不匹配,因此我将背景颜色更改为清除以对其进行排序,即将其添加到上面的块中:
popover.popoverController.backgroundColor = [UIColor clearColor];
2) 在 segue 的目标控制器中找到属性 'Popover' 并勾选 'Use Explicit Size' 并将您希望它显示为 popover 模式的大小。
【讨论】:
以上是关于在 iPad 中居中 uipopover的主要内容,如果未能解决你的问题,请参考以下文章