4

我正在开发一个应用程序,该应用程序具有一些包含在弹出窗口中的表单。我的问题是,当我单击任何文本输入字段并出现键盘时,弹出框缩小到屏幕的左上角(0,0),您看不到正在输入的字段。当您单击隐藏键盘按钮时,弹出框将返回其正常大小和位置。

当键盘出现时,有什么办法可以防止弹出框调整大小?

以下是屏幕截图,以防我的描述不充分。

http://i.imgur.com/vHyJ5.jpg http://i.imgur.com/vtjCX.jpg

编辑:这是弹出框如何在屏幕上显示的代码:

(void)displayPopoverForOrientation:(UIInterfaceOrientation)orientation {
if ([Utilities getAppDelegate].menuPopover) {
    CGRect rect = CGRectMake(0, 0, 0, 0);
    if (orientation == UIInterfaceOrientationLandscapeLeft ||
        orientation == UIInterfaceOrientationLandscapeRight) {
        if (self.currentPopover == RESERVATIONS_POPOVER) {
            rect = CGRectMake(365, 0, 0, 0);
        } else if (self.currentPopover == ACCOUNT_POPOVER) {
            rect = CGRectMake(600, 0, 0, 0);
        } else if (self.currentPopover == RESORTS_POPOVER) {
            rect = CGRectMake(0, 0, 0, 0);
        }
    }

    [[Utilities getAppDelegate].menuPopover presentPopoverFromRect:rect
                                                            inView:self.view 
                                          permittedArrowDirections:UIPopoverArrowDirectionUp 
                                                          animated:YES];
}
}

弹出框内部是一个单独的视图控制器,其布局设置在 xib 中。随意提出任何问题,我对 iOS 和 Objective C 还很陌生,但我对编码并不陌生,所以我会尽力澄清。

编辑 2:我发现这只发生在 iOS 5 中。在旧版本的 iOS 中,弹出框只会垂直折叠,直到有足够的空间放置键盘。关于为什么这种行为在 iOS 5 中发生变化的任何想法?

4

2 回答 2

2

当键盘出现时,无法阻止弹出框改变形状。根据 Apple 的UIPopoverController文档:

您指定的大小只是弹出框视图的首选大小。实际大小可能会改变,以确保弹出框适合屏幕并且不会与键盘碰撞。

IOS 会尝试将其移开,但这可能是不可能的,具体取决于您从何处展示它。为了获得最佳效果,请从条形按钮或滚动视图内部呈现它(UITableView 可以),并设计您的 UI,使弹出框不会太大(如果弹出框覆盖了大部分屏幕,也许您应该考虑使用 segue模态视图或类似视图)。我发现我需要绘制一些图表,以便更好地理解布局,然后才能获得适用于所有情况的解决方案。

于 2012-03-30T01:47:41.937 回答
2

实际上很有可能!...这与 IB 中默认勾选的自动调整大小有关:

我在另一个论坛上发布了类似问题,..我的解决方案是:

1) 通过 2) 打开导致问题的 XIB ViewController(即 PopOver 之一)进入设计器。3) 点击选择它的VIEW。4) 取消选中“AutoResizeSubviews” 5) 在代码中加载 PopOver 时,请确保您这样做: 6) Your_Popup_Window.popoverContentSize = Your_ViewController.view.bounds.size;

我希望这有帮助。

亲切的问候海德萨蒂

于 2014-01-09T11:02:41.510 回答