【问题标题】:popoverController does not show after upgrading Xcode from 7 to 10将 Xcode 从 7 升级到 10 后 popoverController 不显示
【发布时间】:2019-10-27 00:02:56
【问题描述】:

我有这个以前在 Xcode 7 中开发和维护的应用程序。 但最近我们不得不将 Xcode 升级到 10 才能将应用发布到 Apple Store。

许多布局在更新时被破坏,这似乎是一个已知问题 ref。我相信这是自动布局的问题。我通过转到情节提要添加所需的约束来修复它们。

但是其中一个 popovercontroll 存在问题,我不知道如何解决。

它应该是这样的:

这是升级后的样子:

弹出框未显示。

代码没有改变。它是继承自UITableViewController 的自定义表格视图控制器。我尝试了更新框架,但没有奏效。 应该弹出视图的代码:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
UNISortTableViewController *contentViewController = [storyBoard instantiateViewControllerWithIdentifier:@"UNISortTableViewController"];

((UNISortTableViewController *)contentViewController).sortKeyArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
[(UNISortTableViewController *)contentViewController setPreviousSortKeyIndex:sortKeyIndex];
[(UNISortTableViewController *)contentViewController setPreviousSortOrder:ascIssues];

self.popoverController = [[popoverClass alloc] initWithContentViewController:contentViewController];

if ([self.popoverController respondsToSelector:@selector(setContainerViewProperties:)]) {
    [self.popoverController setContainerViewProperties:[self improvedContainerViewProperties]];
}

self.popoverController.delegate = self;
contentViewController.delegate = self;

[self.popoverController presentPopoverFromBarButtonItem:sender
                               permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown|
                                                         UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight)
                                               animated:YES];

调试时我可以看到cellforrowatindexpath 事件未被调用

【问题讨论】:

  • 你的代码是否使用了 UIPopoverController?此对象在 iOS 9 中已被弃用,因此,您必须编写其他选项。
  • @Michael Dougan 我更新了触发代码。不确定 self.popoverController 是否与 UIPopoverController 相同。但它适用于 iPad..

标签: ios objective-c xcode autolayout xcode10


【解决方案1】:

您的过时代码正在调用initWithContentViewController。这表明您正在使用 UIPopoverController,它在 iOS 9 之后已被弃用。

https://developer.apple.com/documentation/uikit/uipopovercontroller/1624669-initwithcontentviewcontroller?language=objc

您需要现代化处理弹出框的方法。如今,弹出框只是各种呈现的视图控制器。不再有 UIPopoverController 这样的东西了。您只需在普通 UIViewController 上调用 presentViewController 并使用 modalPresentationStyleUIModalPresentationPopover。您指定箭头指向的整个方式也发生了变化,但我不会详细说明,因为完整的信息可以在文档和其他地方找到。

【讨论】:

    【解决方案2】:

    似乎 Xcode 10 中的 popoverContentSize 变成了 0,0

    我最终使用了以下代码

      if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad))
    {
        self.popoverController.popoverContentSize = contentViewController.preferredContentSize;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2020-09-26
      相关资源
      最近更新 更多