【问题标题】:UIPopOverController shrinking when presenting alert controller呈现警报控制器时 UIPopOverController 缩小
【发布时间】:2014-09-24 19:06:49
【问题描述】:

我在 iPad 上有以下 UIPopOverController。这是一个带有通用故事板的 iOS 8 应用程序。在 XCode 中,我选择了这个的 segue 为“Present as Popover”。

只要这个视图控制器呈现一个 UIAlertController,就会发生这种情况:

弹出框缩小到一个奇怪的大小。 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)

我根本没有玩过视图控制器的约束,所以我不知道为什么会这样。防止这种情况发生的正确方法是什么?

【问题讨论】:

  • 您的问题有解决方案吗?因为我有同样的问题。
  • 很遗憾没有。还在找。
  • 显然这个错误会在 iOS 9.0 中回归

标签: storyboard ios8 uipopovercontroller uialertcontroller universal-storyboard


【解决方案1】:

这似乎是 iOS 8.0.2 及更低版本的错误。我所有的设备现在都更新到 iOS 8.1。我没有更改我的代码,并且我的所有弹出框在它们出现时都不会缩小。

【讨论】:

    【解决方案2】:

    它对我有用。 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];
    

    【讨论】:

      【解决方案3】:

      也许现在为时已晚,但我在 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 的魔力。我还需要恢复视图框架,因为它仍然缩小了。 UIViewController preferredContentSize 应该更早地设置在别处。

      希望这对某人有所帮助。

      【讨论】:

        【解决方案4】:

        当您使用modalPresentationStyle = UIModalPresentationStyle.CurrentContext 显示UIViewController 并使用UIAlertController 显示警报时会出现问题。请改用UIModalPresentationStyle.OverCurrentContext

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-19
          • 1970-01-01
          • 1970-01-01
          • 2020-06-05
          • 2015-04-10
          • 1970-01-01
          • 2020-02-13
          相关资源
          最近更新 更多