如何在带有标题视图和 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 的自定义 XIB 单元格在滚动时卡住/卡住