【问题标题】:centering a uipopover in iPad在 iPad 中居中 uipopover
【发布时间】:2010-11-19 18:50:34
【问题描述】:

我想为 iPad 创建一个新键盘。

我设计了一个视图,该视图具有键和所有底层工作以在用户按下键时填充文本框,并在用户按下返回按钮时将值传递回调用例程。

一切正常。

现在 - 我想将此视图创建为弹出框。

我已经完成了基本操作(弹出并被关闭)

但现在我需要一些微调帮助。

这是我的问题......

1) 如何在没有 UIPopoverArrowDirectionAny 选择的情况下创建一个以屏幕为中心的弹出窗口?

2) 确保弹出窗口的大小是我在 XIB 文件中创建的大小(目前,它会调整大小并删除窗口最右边的一些大小)

谢谢
托尼

【问题讨论】:

    标签: ipad uipopovercontroller


    【解决方案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 模式的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多