如何使用标题视图和UITableview在自定义视图中正确动画UISearchbar?

时间:2011-11-04 14:25:23

标签: iphone objective-c ios uitableview uisearchbar

我有一个自定义的UIViewController,它来自一个具有以下视图层次结构的nib文件:

Nib

...左侧橙色区域是“标题视图”,中间有两个UIButton和一个UILabel,蓝色区域是UITableView;所有这些都在一个UIView下。

在运行时,这会或多或少地呈现如下:

Render

此时,每当用户点击搜索栏时,我都希望隐藏导航栏和标题视图,并将搜索栏移到窗口顶部。

然而情况并非如此,因为导航栏会自动退出窗口并且标题视图将移至顶部,但仍会保留在场景中;休息将坚持原来的地方。

此时我必须添加以下代码才能将标题视图移出窗口:

- (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];
}

将导致:

Search

...您可能已经注意到标题视图移动得很好,但搜索栏会保持原来的位置。

我尝试重新定位self.view或搜索表格视图,但没有运气。

我该怎么办?感谢。

1 个答案:

答案 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];

......相应地。