我有一个自定义的UIViewController,它来自一个具有以下视图层次结构的nib文件:
...左侧橙色区域是“标题视图”,中间有两个UIButton和一个UILabel,蓝色区域是UITableView;所有这些都在一个UIView下。
在运行时,这会或多或少地呈现如下:
此时,每当用户点击搜索栏时,我都希望隐藏导航栏和标题视图,并将搜索栏移到窗口顶部。
然而情况并非如此,因为导航栏会自动退出窗口并且标题视图将移至顶部,但仍会保留在场景中;休息将坚持原来的地方。
此时我必须添加以下代码才能将标题视图移出窗口:
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.2];
CGRect frame = self.headerView.frame;
frame.origin.y -= frame.size.height;
self.headerView.frame = frame;
[UIView commitAnimations];
}
将导致:
...您可能已经注意到标题视图移动得很好,但搜索栏会保持原来的位置。
我尝试重新定位self.view
或搜索表格视图,但没有运气。
我该怎么办?感谢。
答案 0 :(得分:8)
确保您实施了UISearchDisplayDelegate的searchDisplayControllerWillBeginSearch:
和searchDisplayControllerWillEndSearch:
,并使用类似的内容:
[UIView beginAnimations:nil context:NULL];
CGRect headerViewFrame = self.headerView.frame;
headerViewFrame.origin.y -= 44.0f;
self.headerView.frame = headerViewFrame;
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y -= 44.0f;
self.tableView.frame = tableViewFrame;
[UIView commitAnimations];
和
[UIView beginAnimations:nil context:NULL];
CGRect headerViewFrame = self.headerView.frame;
headerViewFrame.origin.y += 44.0f;
self.headerView.frame = headerViewFrame;
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y += 44.0f;
self.tableView.frame = tableViewFrame;
[UIView commitAnimations];
......相应地。