如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?

Posted

技术标签:

【中文标题】如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?【英文标题】:How to animate correctly UISearchbar within a custom view with a header view and a UITableview? 【发布时间】:2011-11-04 14:25:22 【问题描述】:

我有一个从具有以下视图层次结构的 nib 文件初始化的自定义 UIViewController:

...左侧橙色区域是一个“标题视图”,中间有两个 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 或搜索表格视图,但没有运气。

我该怎么办?谢谢。

【问题讨论】:

作为一个快速修复,我引入了另一个 UIView,其中包括标题视图和表格视图(这有多丑?),并将其设置为 frame.origin.y 上下,以获得良好的隐藏和显示效果,但这会(以某种方式)破坏用户界面,因此表格视图最初不会滚动,但只会在任何其他事件之后(例如点击搜索栏、设备旋转等) 【参考方案1】:

确保实现 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];

...相应地。

【讨论】:

我不得不回答我自己的问题,因为没有足够的关注

以上是关于如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?的主要内容,如果未能解决你的问题,请参考以下文章

一个 UIViewController 中的自定义单元格 tableview 和默认 UITableView

如何滚动uitableview和顶部的部分标题,可见并滚动到

UITableView 中滚动的自定义视图

用于 UITableView 的自定义 XIB 单元格在滚动时卡住/卡住

如何让 UITableView 继承 UIViewController 的自定义子类?

带有侧部分标题图像的 UITableView