ich es geschafft, ein sehr ähnliches Problem, das dem von Ihnen auftreten programmatisch die UISearchController
wie so up Einstellung zu lösen:
Hinweis ~ Die Fehler, wenn hidesNavigationBarDuringPresentation
bleibt auf NO nicht gesetzt.
#pragma mark - View Life Cycle
- (void)viewDidLoad {
[super viewDidLoad];
self.results = [[NSArray alloc] init];
// 1 \\ Results Table View
UITableView *searchResultsTableView = [[UITableView alloc] initWithFrame:self.tableView.frame];
[searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:Identifier];
searchResultsTableView.delegate = self;
searchResultsTableView.dataSource = self;
// 2 \\ init search results table view & setting its table view
self.searchResultsTableViewController = [[UITableViewController alloc] init];
self.searchResultsTableViewController.tableView = searchResultsTableView;
self.searchResultsTableViewController.view.backgroundColor = [UIColor blackColor];
// 3 \\ init a search controller with it's tableview controller for results
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsTableViewController];
self.searchController.hidesNavigationBarDuringPresentation = NO; // √
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.barTintColor = [UIColor blackColor];
// 4 \\ Make an appropriate search bar (size, color, attributes) and add it as the header
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.tableView.tableHeaderView.backgroundColor = [UIColor blackColor];
// 5 \\ Enable presentation context
self.definesPresentationContext = YES;
self.tableView.backgroundColor = [UIColor clearColor];
self.currentUser = [PFUser currentUser];
}
Hinzugefügt Weitere Details:
- Interface Builder: UIViewController (nicht UITableViewController)
ein UITableView
mit Constraints hinzufügen:
a. 
b. * My Navigationsleiste ist benutzerdefinierte Höhe - Ihr „Top Space: Top-Layout Guide“ kann
Fügen Sie die Delegierten & Datenquelle Stellen aus der addierten Tabellenansicht auf die UIViewController
geändert wird ein . Vergessen Sie nicht, so programmatisch zu tun:
@interface AddUsersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
In Ihrer Interface Extension:
ein. Stellen Sie Ihren UISearchConroller
‚s Delegierten und Datenquelle:
#import "AddUsersViewController.h"
#define ResultsTableView self.searchResultsTableViewController.tableView
#define Identifier @"Cell"
@interface AddUsersViewController() <UISearchControllerDelegate, UISearchResultsUpdating>
@property (nonatomic) UISearchController *searchController;
@property (nonatomic) UITableViewController *searchResultsTableViewController;
@property (nonatomic, weak) UIBarButtonItem *leftBarButton;
@property (nonatomic) NSArray *results;
@end
Obwohl dies für mich gearbeitet, ich habe entdeckt, dass es auch andere mögliche Szenarien gibt, die dies verursachen könnte. Mein "Problem" war nicht, dass die Suchleiste um 20px (oder so) nach unten verschoben wurde, sondern dass sie sich nach oben bewegte. Ich schrieb dies einem benutzerdefinierten UINavigationBar-Header zu, der einen Bildtitel und benutzerdefinierte NavBarButtons enthielt. In diesem Sinne sind hier zwei weitere mögliche Lösungen:
.
Original-Szenarien:
Ihre Container Ansicht des extendedLayoutIncludesOpaqueBars
Property
ein. Storyboard: Überprüfen Sie √ "Under Opaque Bars" für die Tabellenansichten im Storyboard.
b. Programmatisch: yourTableView(s).extendedLayoutIncludesOpaqueBars
= JA;
.
Set scopeButtonTitles
auf ein leeres Array. (Unten)
self.searchController = UISearchController(searchResultsController: nil);
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.scopeButtonTitles = [];
self.tableView.tableHeaderView = self.searchController.searchBar;
Die später zwei Antworten kommen aus THIS Frage und beweisen kann auch bei der Prüfung von Vorteil sein.
Dank der Forschung und Tests von BananaNeil, entdeckte er, dass wenn Sie die meine Empfehlungen befolgen und Ihre searchController.searchBar.y = 0
setzen, Ihre Suchleiste genau da sein sollte, wo Sie gehofft hatten. √
Ich habe dieses Problem mit 'UISearchController' erinnern Sie sich, wenn/wie Sie es behoben? – AnthonyM