带有UISearchDisplayController的UISearchBar在屏幕外animation

我有标准的iPad视图控制器,其顶部有一个自定义的导航栏。 在xib文件中,我添加了一个与视图右边缘alignment的UISearchBar。 search栏的宽度是320px。 我像这样初始化一个searchdisplaycontroller:

// Search display controller self.mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self]; _mySearchDisplayController.delegate = self; _mySearchDisplayController.searchResultsDataSource = self; _mySearchDisplayController.searchResultsDelegate = self; 

问题是,当我按下search栏,栏调整为整个视图的整个宽度,但保持其x位置。 这意味着它延伸到屏幕之外。 我猜测它与在search栏旁边滑动的“取消”button有关。 如果将search栏放在屏幕的最左侧,则会将其移动到屏幕的整个宽度,并可以看到取消button。

任何人都有这个解决scheme?

您可以在searchDisplayControllerWillBeginSearch方法中为UISearchBar的框架设置animation,以像这样纠正其位置:

 - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { // animate the search bar to the left ie. x=0 [UIView animateWithDuration:0.25f animations:^{ CGRect frame = controller.searchBar.frame; frame.origin.x = 0; controller.searchBar.frame = frame; }]; // remove all toolbar items if you need to [self.toolbar setItems:nil animated:YES]; } 

并在完成search后重新执行animation处理:

 - (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { // animate search bar back to its previous position and size // in my case it was x=55, y=1 // and reduce its width by the amount moved, again 55px [UIView animateWithDuration:0.25f delay:0.0f // the UIViewAnimationOptionLayoutSubviews is IMPORTANT, // otherwise you get no animation // but some kind of snap-back movement options:UIViewAnimationOptionLayoutSubviews animations:^{ CGRect frame = self.toolbar.frame; frame.origin.y = 1; frame.origin.x = 55; frame.size.width -= 55; controller.searchBar.frame = frame; } completion:^(BOOL finished){ // when finished, insert any tool bar items you had [self.toolbar setItems:[NSArray arrayWithObjects: /* put your bar button items here */] animated:YES]; }]; } 

我已经回答了一个类似的问题,你可以在这里查看 ,我也提供了一些图片。

你唯一需要做的就是调整iPad的代码。