从后台线程在 UINavigationItem 上显示 UISearchController

Showing UISearchController on UINavigationItem from background thread

使用iOS 11 SDK,如果你想从后台线程显示它,更新的UISearchController出现:

- (void)viewDidLoad
{
    self.searchResultsController = [UITableViewController new];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        NSLog(@"Do something in background");

        dispatch_async(dispatch_get_main_queue(), ^{
            if (@available(iOS 11.0, *)) {
                self.navigationItem.searchController = self.searchController;
            }
        });
    });
}

谁知道后台任务完成后怎么显示?

编辑 1: VC with search controller 不应该是初始的 VC。

我试过你的代码,它运行良好。请确保您的设备或您的模拟器版本大于或等于 iOS 11,并且您不要对 navigationItem.

进行任何其他操作

如果您 VC 被另一个 viewController 推送或呈现,请将您的代码放入 viewDidAppear。它会起作用