以编程方式实现不滚动的搜索栏

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

Swift iOS以编程方式在导航栏下方设置scrollView约束

iOS:从导航栏中删除以编程方式添加的搜索栏