4

我在iPad上有以下UIPopOverController。這是一個帶有通用故事板的iOS 8應用程序。在XCode中,我選擇了「作爲Popover存在」。UIPopOverController在呈現提醒控制器時收縮

enter image description here

每當這個視圖控制器提出了一個UIAlertController,出現這種情況:

enter image description here

的酥料餅縮小到一個奇怪的大小。該UIAlertController從彈出提出過爲:

 var alert = UIAlertController(title: NSLocalizedString("Error", comment: "A simple error label"), message: NSLocalizedString("This account is already linked to the app.", comment: "A string describing the problem"), preferredStyle: .Alert) 
     var action = UIAlertAction(title: NSLocalizedString("OK", comment: "Simple string"), style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in 
      self.usernameTextField.becomeFirstResponder() 
      self.passwordTextField.text = "" 
      return 
     }) 
     alert.addAction(action) 
     self.presentViewController(alert, animated: true, completion: nil) 

我還沒有與視圖控制器中的所有約束玩過,所以我不知道爲什麼會這樣。什麼纔是防止這種情況發生的正確方法?

+0

你有問題的解決方案嗎?因爲我有同樣的問題。 – iBapu 2014-10-13 13:51:09

+0

不幸的是沒有。仍在尋找一個。 – 2014-10-15 15:21:53

+0

顯然這個bug在iOS9.0中回報 – 2015-11-24 21:54:36

回答

1

它看起來這是與iOS 8.0.2及以下的錯誤。我所有的設備現在都更新到iOS 8.1。我沒有改變我的代碼,當他們出現時,我所有的彈出不會縮水。

0

它爲我工作。 nav.preferredContentSize =CGSizeMake(320, 480); 我的代碼如下,可能對你有幫助。

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:myController]; 
nav.preferredContentSize =CGSizeMake(320, 480); 
popOver = [[UIPopoverController alloc] initWithContentViewController:nav]; 
[popOver presentPopoverFromRect:frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:NO]; 
0

也許現在已經太晚了,但我在iOS9.0上發生過同樣的問題。 我有一個UINavigationController控制器根UIViewController放置在UIPopoverController內。在從UIViewController呈現UIAlertController之後,彈出窗口縮小以提醒視圖大小。 一些研發後,我想出了這個解決方案:

- (void)viewWillLayoutSubviews 
{ 
    CGSize preferredContentSize = self.preferredContentSize; 
    CGSize fakeMomentarySize = CGSizeMake(preferredContentSize.width + 1.0f, preferredContentSize.height + 1.0f); 
    self.preferredContentSize = fakeMomentarySize; 
    self.preferredContentSize = preferredContentSize; 

    CGRect frame = self.view.frame; 
    frame.size  = [self preferredContentSize]; 
    self.view.frame = frame; 

    [super viewWillLayoutSubviews]; 
} 

我已經把這個代碼在我的UIViewController。出於某種原因解除警報視圖後,不會調用viewWillAppearviewDidAppear方法,導航控制器委託也不會回覆此移動,因此視圖控制器不參與計算其大小。所以我把它放在viewWillLayoutSubviews。在question中描述了設置爲preferredContentSize的魔術。此外,我需要恢復視圖框架,因爲它仍然縮小。 UIViewControllerpreferredContentSize應該在其他地方設置。

希望這可以幫助別人。

0

當您將UIViewControllermodalPresentationStyle = UIModalPresentationStyle.CurrentContext一起顯示並顯示UIAlertController的警報時,會出現此問題。改爲使用UIModalPresentationStyle.OverCurrentContext

相關問題