如何防止滚动UItable视图的tableHeaderView,坚持在顶部

时间:2013-02-05 13:43:59

标签: iphone objective-c uitableview uisplitviewcontroller nstableheaderview

在我的拆分视图应用程序中,无法将搜索栏添加到拆分视图的rootView

所以我在ui表视图的tableHeaderView中动态添加了搜索栏,如下所示

searchBar = [[UISearchBar alloc] init];
      searchBar.frame=CGRectMake(0, self.tableView.frame.origin.y, self.tableView.frame.size.width, 44);
      [searchBar sizeToFit];
      self.tableView.tableHeaderView = searchBar;

enter image description here

向下滚动:iThe tableHeaderView也向下滚动,因此搜索栏也会滚动

enter image description here

当滚动顶部:tableHeaderView也滚动到顶部,因此搜索栏也会滚动

enter image description here

我实施了以下代码来解决此问题 this helps only when scrolls down ,但是当我们将表格视图滚动到上方时它再次以表格视图移动

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
      CGRect rect = self.tableView.tableHeaderView.frame;
      rect.origin.y = MIN(0, self.tableView.contentOffset.y);
      self.tableView.tableHeaderView.frame = rect;
}

我需要将viewHeaderView / Search栏始终放在视图的顶部

如何做到这一点

3 个答案:

答案 0 :(得分:0)

将搜索栏放在单独的视图中,并将该视图放在表格视图上方。这意味着它保持不变。

答案 1 :(得分:0)

您可以使用tableView

单独添加tabBar
mySearchBar = [[UISearchBar alloc] init];
[mySearchBar setHidden:NO];
mySearchBar.placeholder = @"Search item here";
mySearchBar.tintColor = [UIColor darkGrayColor];
mySearchBar.frame = CGRectMake(0, 0, 320, 44);
mySearchBar.delegate = self;
[mySearchBar sizeToFit];
[mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];

[self.view addSubview:mySearchBar];  

和tableView

UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 44, 320, 436)];
[self.view addSubview:tableView]; 

如果你想添加xib,那么

enter image description here

答案 2 :(得分:-2)

我确信之前已经回答过,但假设您使用UITableViewController,您可以将view属性设置为您想要的任何内容。因此,一种方法是设置一个容器视图,顶部的搜索栏和它下面的表格,并使view成为此容器。默认情况下,tableView会返回view,因此您需要处理的另一个细节是覆盖tableView属性以返回实际的表格视图(您已存储在ivar中) )。代码可能如下所示:

@synthesize tableView = _tableView;

- (void)loadView
{
    [super loadView];

    _tableView = [super tableView];

    // Container for both the table view and search bar
    UIView *container = [[UIView alloc] initWithFrame:self.tableView.frame];

    // Search bar
    UIView *searchBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 50)];

    // Reposition the table view below the search bar
    CGRect tableViewFrame = container.bounds;
    tableViewFrame.size.height = tableViewFrame.size.height - searchBar.frame.size.height;
    tableViewFrame.origin.y = searchBar.frame.size.height + 1;
    self.tableView.frame = tableViewFrame;

    // Reorganize the view heirarchy
    [self.tableView.superview addSubview:container];
    [container addSubview:self.tableView];
    [container addSubview:searchBar];
    self.view = container;
}