popoverController не отображается после обновления Xcode с 7 до 10 - PullRequest
0 голосов
/ 12 июня 2019

У меня есть это приложение, которое было ранее разработано и поддерживается на Xcode 7. Но недавно нам пришлось обновить Xcode до 10, чтобы иметь возможность публиковать приложение в Apple Store.

Многие макеты были повреждены при обновлении, и это, кажется, известная проблема исх . Я считаю, что это проблема 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 ]

1 голос
/ 13 июня 2019

Ваш устаревший код звонит initWithContentViewController.Это говорит о том, что вы используете UIPopoverController, который устарел после iOS 9.

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

Вам необходимо модернизировать свой подход к всплывающим окнам.В настоящее время всплывающие окна являются просто разновидностью представленного контроллера представления.Больше нет такого понятия, как UIPopoverController.Вы просто вызываете presentViewController на обычном контроллере UIViewController с modalPresentationStyle из UIModalPresentationPopover.Весь способ, которым вы указываете направление стрелки, также изменился, но я не буду вдаваться в подробности, поскольку полная информация доступна в документах и ​​в других местах.

0 голосов
/ 13 июня 2019

Похоже, Xcode 10 popoverContentSize становится 0,0

В итоге я использовал следующий код

  if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad))
{
    self.popoverController.popoverContentSize = contentViewController.preferredContentSize;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...