12

我在表格视图的顶部实现了一个搜索栏和搜索显示控制器。

当视图加载时,搜索栏和相关范围总是可见的。

有没有一种简单的方法来隐藏它,直到用户向下滚动,就像它发生在音乐应用程序中一样?

4

6 回答 6

18

您需要将搜索栏添加为表格视图的标题,然后将表格视图的contentoffset属性设置viewDidLoad为,

[self.tableView setContentOffset:CGPointMake(0,44) animated:YES];//or (0, 88) depends on the height of it

对于搜索显示控制器,你也可以试试这个,

[self.searchDisplayController setActive:NO animated:YES];
于 2012-12-24T06:00:01.417 回答
12

另一种没有硬编码的方法

[self.tableView setContentOffset:CGPointMake(0.0, self.tableView.tableHeaderView.frame.size.height) animated:YES];
于 2014-03-15T08:31:57.523 回答
7

拉了几个小时的头发后,一些有效的东西

  • 在 iOS 9 上
  • 不依赖于表中的行数
  • 具有可变高度行

    考虑到搜索栏是 tableView.tableHeaderView

    @interface MyTableViewController ()
    
    @property (nonatomic, assign) BOOL firstLayout;
    
    @end
    
    - (void) viewDidLoad {
    [super viewDidLoad];
    
    
    self.firstLayout = YES;
    //your code
    
    }
    
    -(void)viewDidLayoutSubviews{
    
    [super viewDidLayoutSubviews];
    
    if(self.firstLayout){
    CGPoint offset = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height - self.tableView.contentInset.top);
    [self.tableView setContentOffset:offset];
    
        self.firstLayout = NO;
    
    }
    
    }
    
于 2015-11-03T23:27:20.930 回答
0

适用于 iOS 7 并使用UINavigationController

[self.tableView setContentOffset:CGPointMake(0, self.searchBar.height + self.navigationController.navigationBar.height)];
于 2014-04-01T18:56:00.933 回答
0

我重新加载tableview的最佳方式

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];     
    [self performSelector:@selector(reload:) withObject:nil afterDelay:0.0];
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

- (void)reload:(__unused id)sender {
        [self.searchDisplayController setActive:YES];
        [self.tableView reloadData];
        [self.refreshControl endRefreshing];
    } else {
        [self.refreshControl endRefreshing];
        [[[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
    }
}

谢谢

于 2015-08-05T06:51:23.567 回答
0

这在 iOS9+ 上运行良好

- (void)viewDidLoad {
    [super viewDidLoad];

    dispatch_async(dispatch_get_main_queue(), ^{
        self.tableView.contentOffset = CGPointMake(0, -20);
    });
}
于 2017-09-11T20:05:07.787 回答