我在iPad上有以下UIPopOverController。这是一款带有通用故事板的iOS 8应用程序。在XCode中,我选择了它作为“作为弹出窗口存在”的segue。
每当这个视图控制器呈现UIAlertController时,就会发生这种情况:
popover缩小到一个奇怪的大小。 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 :(得分:1)
看起来这是iOS 8.0.2及更低版本的错误。我的所有设备现在都更新到iOS 8.1。我没有改变我的代码,当我们的代码出现时,我的所有邮件都不会缩小。
答案 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];
答案 2 :(得分:0)
现在可能为时已晚,但我在iOS9.0上遇到了同样的问题。
我有一个UINavigationController
控制器,根UIViewController
放在UIPopoverController
内。从UIAlertController
提出UIViewController
后,popover会缩小以提醒视图大小。
经过一番研究,我得到了这个解决方案:
- (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中。由于某些原因,在解除警报视图后,没有调用viewWillAppear
或viewDidAppear
方法,导航控制器委托也不会回复此移动,因此视图控制器不会参与计算它的大小。所以我把它放在viewWillLayoutSubviews
中。设置preferredContentSize
的魔力在此question中有所描述。我还需要恢复视图框架,因为它仍然缩小了。 UIViewController
preferredContentSize
应该在其他地方设置。
希望这有助于某人。
答案 3 :(得分:0)
当您使用UIViewController
展示modalPresentationStyle = UIModalPresentationStyle.CurrentContext
并显示UIAlertController
的提醒时,会出现此问题。请改用UIModalPresentationStyle.OverCurrentContext
。