In iOS 11.0+ I use the following statements to add a UISearchController to the navigation bar:
[[self navigationItem] setSearchController:[self myUISearchController]];
[[self navigationItem] setHidesSearchBarWhenScrolling:NO];
[self setDefinesPresentationContext:YES];
To hide the UISearchController I tried the following:
[[self myUISearchController] setActive:NO];
[[self myUISearchController] removeFromParentViewController]; // just a try
[[self navigationItem] setSearchController:nil]; // this should be sufficient
[self myUISearchController:nil];
Actually, the search controller disappears but leaves a black rectangle at the position where it was. It seems to be that the UITableViewController inside the UINavigationController does not re-align its table view and therefore leaves a black rectangle.
Any ideas?