将Xcode从7升级到10后,popoverController不显示

时间:2019-06-12 12:56:25

标签: ios objective-c xcode autolayout xcode10

我有这个应用程序,以前是在Xcode 7上开发和维护的。 但是最近我们不得不将Xcode升级到10,才能将应用发布到苹果商店。

许多布局在更新时被破坏,这似乎是一个已知问题 ref。我相信这是AutoLayout问题。我通过在情节提要中添加了必要的约束来解决了这些问题。

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

这是它的外观: enter image description here

以下是升级后的外观: enter image description here

弹出窗口没有显示。

代码未更改。它是自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事件

2 个答案:

答案 0 :(得分:1)

您过时的代码正在调用initWithContentViewController。这表明您使用的是UIPopoverController,在iOS 9之后不推荐使用。

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

您需要使弹窗方法现代化。如今,弹出窗口只是各种呈现的视图控制器。没有像UIPopoverController这样的东西了。您只需在presentViewControllermodalPresentationStyle的普通UIViewController上调用UIModalPresentationPopover。您指定箭头移动方向的整个方式也已更改,但是由于文档和其他地方都提供了完整的信息,因此我将不做详细介绍。

答案 1 :(得分:0)

好像Xcode 10一样,popoverContentSize变成了0,0

我最终使用了以下代码

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