代码之家  ›  专栏  ›  技术社区  ›  pithhelmet

在iPad中使uipoover居中

  •  13
  • pithhelmet  · 技术社区  · 14 年前

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

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

    一切正常。

    现在-我想创建一个弹出窗口视图。

    我已完成基本操作(弹出并被解雇)

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

    以下是我的问题。。。

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

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

    谢谢
    托尼

    3 回复  |  直到 14 年前
        1
  •  57
  •   George    13 年前

    若要显示它而不带箭头,请为“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时抛出异常,或者默认为某个异常。使用它的风险由你自己承担。

        2
  •  0
  •   jabroni    14 年前

    如果您使用的是UIPopoverController,它将有一个箭头。这是你的选择。

    UIPopoverArrowDirectionAny  
    UIPopoverArrowDirectionUp
    UIPopoverArrowDirectionDown
    UIPopoverArrowDirectionLeft
    UIPopoverArrowDirectionRight
    

    如您所见,没有uipopoverrowdirectionnone

    至于XIB的大小,在实现文件的ViewDidLoad方法中,可以设置以下内容。

    self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0);
    

    你可以根据自己的喜好为翻领衫设定尺寸。

        3
  •  0
  •   Oly Dungey    10 年前

    我刚刚做了这个,但是我想在故事板上做尽可能多的事情,这改变了我的方法:

    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的角半径与我的设计不匹配,因此我将背景颜色更改为clear以进行排序,即将此添加到上面的块中:

    popover.popoverController.backgroundColor = [UIColor clearColor];
    

    2) 在segue的目标控制器中,找到属性'Popover',勾选'Use Explicit Size',并将要显示的大小设置为Popover模式。