以编程方式实现不滚动的搜索栏
Posted
技术标签:
【中文标题】以编程方式实现不滚动的搜索栏【英文标题】:Programatically implement a searchbar that doesn't scroll 【发布时间】:2014-06-10 16:18:33 【问题描述】:我正在以编程方式实现一个基本的搜索栏。当表格滚动时,我不知道如何使搜索栏粘在标题上。这是我加载搜索栏的代码:
-(void)loadbar
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
self.tableView.tableHeaderView = searchBar;
搜索栏继承自 UISearchBar,searchDisplayController 继承自 UISearchDisplayController
谢谢!
【问题讨论】:
让它滚动是什么意思?您希望搜索栏在表格视图滚动时滚动(它会随您的代码滚动)还是您的意思是别的? 您告诉我们您想做什么。您发布了一些代码。但是您还没有告诉我们您遇到了什么问题。请解释一下。 @rmaddy 请查看更新。我希望能够滚动 tableview 并且仍然将搜索栏卡在顶部。 好的,那么您需要一个不滚动的搜索栏。请更新您的标题和您的问题以明确这一点。如果你不想让它滚动,那么你不能让它成为表格视图的一部分。 @rmaddy 更新了我的问题。很抱歉造成混乱,感谢您的帮助。 【参考方案1】:表格的标题视图随表格滚动。如果不希望搜索栏随表格视图滚动,则不能将搜索栏设置为标题视图。
你有三个选择。
-
将搜索栏添加到导航栏
使搜索栏成为表格视图的子视图。为表格视图实现
scrollViewDidScroll:
委托方法,并在表格滚动时调整滚动条的位置。
不要使用UITableViewController
。使用UIViewController
并添加您自己的表格视图。在顶部添加搜索栏,在搜索栏下方添加表格视图。
【讨论】:
我在导航栏中添加了搜索栏以寻求帮助:***.com/questions/3351464/…【参考方案2】:解决方案
使用单节表格视图并将搜索栏设置为节标题。
讨论
以前,ios 能够识别搜索栏何时位于表格视图标题中。在这种情况下,搜索栏隐藏在导航栏下方,可以向下滚动以显示它。使用时,搜索栏固定在窗口顶部,不随表格视图内容滚动。从最近开始,这种行为被打破了:搜索栏随着单元格滚动。
在建议的解决方案中,我们将搜索栏设置为部分标题。在我们滚动通过该部分的末尾之前,部分标题保持可见。因此,如果我们只有一个部分,搜索栏总是可见的。
目标-C
// Class members
UISearchBar *searchBar;
- (void)viewDidLoad
// Inherited
[super viewDidLoad];
// Search Bar
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
searchBar.delegate = self;
searchBar.barStyle = UISearchBarStyleMinimal;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// It is mandatory to have one section, otherwise the search bar will scroll
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// TODO: Return the number of elements in the table
return 1;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return searchBar.frame.size.height;
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
return searchBar;
【讨论】:
以上是关于以编程方式实现不滚动的搜索栏的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式平滑滚动 UIPageViewController