iOS 8中UISearchController和UINavigationController之间的交互不一致
在iOS 8中,我从UISearchController与UINavigationController交互中得到了奇怪、随机、不一致的行为。选择搜索栏后,有时iOS会在右侧显示视图,有时会在左侧显示视图: 你可以看到 我不在乎我得到的是哪个版本,但让我发疯的是前后矛盾 以下是设置搜索栏和工具栏的iOS 8中UISearchController和UINavigationController之间的交互不一致,ios,objective-c,uinavigationcontroller,ios8,uisearchcontroller,Ios,Objective C,Uinavigationcontroller,Ios8,Uisearchcontroller,在iOS 8中,我从UISearchController与UINavigationController交互中得到了奇怪、随机、不一致的行为。选择搜索栏后,有时iOS会在右侧显示视图,有时会在左侧显示视图: 你可以看到 我不在乎我得到的是哪个版本,但让我发疯的是前后矛盾 以下是设置搜索栏和工具栏的viewDidLoad代码: - (void)viewDidLoad { [super viewDidLoad]; // Create our 4 view-filter button
viewDidLoad
代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Create our 4 view-filter buttons & a flex space
self.mainButton = [[UIBarButtonItem alloc] initWithTitle:@"Main" style:UIBarButtonItemStylePlain target:self action:@selector(viewMain)];
self.viewedButton = [[UIBarButtonItem alloc] initWithTitle:@"Viewed" style:UIBarButtonItemStylePlain target:self action:@selector(viewViewed)];
self.favoritesButton = [[UIBarButtonItem alloc] initWithTitle:@"Favorites" style:UIBarButtonItemStylePlain target:self action:@selector(viewFavorites)];
self.allButton = [[UIBarButtonItem alloc] initWithTitle:@"All" style:UIBarButtonItemStylePlain target:self action:@selector(viewAll)];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
// Add toolbar buttons
NSArray *rightSideButtons = @[self.mainButton, flexSpace, self.favoritesButton, flexSpace, self.viewedButton, flexSpace, self.allButton];
[self setToolbarItems:rightSideButtons];
[self.navigationController setToolbarHidden:FALSE animated:FALSE];
// Set up search bar
self.searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
self.searchResultsController.tableView.dataSource = self;
self.searchResultsController.tableView.delegate = self;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x,
self.searchController.searchBar.frame.origin.y,
self.searchController.searchBar.frame.size.width, 44.0);
self.tableView.tableHeaderView = self.searchController.searchBar;
// this tells the search controller where to display
self.definesPresentationContext = YES;
}
知道为什么iOS在显示工具栏和用键盘覆盖工具栏之间随机切换吗?如果你需要更多的代码,请告诉我,但是我发布了所有似乎相关的部分
谢谢 我通过改变两件事解决了这个问题: 首先,我删除了行
[self.navigationController setToolbarHidden:FALSE动画:FALSE]代码>来自我的viewDidLoad
语句(如问题中所示)
其次,在我的Storboard中,我在包含受影响的表视图的导航控制器上启用了显示工具栏:
我认为这改变了Xcode烘焙UI的方式,到目前为止,我还没有看到在调用搜索时由键盘推动的工具栏
至少,我希望这会有所不同……否则可能是巫毒教。:-) 另外,FWIW,这是在iOS 8.1上,我在iPad和iPhone硬件上看到的结果与我在模拟器上看到的结果相同。这是一个很好的观察结果。我没有在代码中的任何地方使用UIKeyboardWillHideNotification
或UIKeyboardWillShowNotification
。我应该在这里用吗?