2012-01-25 86 views
3

我正在研究一个应用程序,该应用程序有一些弹出窗口中包含的窗体。我的问题是,当我点击任何文本输入字段并且键盘出现时,弹出窗口缩小到屏幕的左上角(0,0),并且看不到要输入的字段。当您单击隐藏键盘按钮时,弹出窗口将恢复到其正常大小和位置。弹出式键盘在iPad上出现键盘时左上角收缩

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

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

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中为什么此行为已更改的任何想法?

+1

代码会有帮助。你如何在屏幕上呈现popover? –

+0

我觉得应该有一些rect的转换。因为您的视图已转换为横向。无法从需要的内存中获取代码。 –

+0

' - (CGRect)convertRect(CGRect *)rect fromWindow:(UIWindow)window'你需要像这种方法之类的东西,然后呈现popover。我认为。 –

回答

2

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

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

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

2

其实这是非常有可能的...这是与通过默认勾选IB自动调整大小做:

我张贴这在一个又一个论坛,类似的问题,。对于解决方案我是:

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

我希望这会有所帮助。

亲切的问候 Heider Sati