UISearchBar UISearchDisplayController

本文介绍了一种在iOS应用中实现固定顶部搜索栏的方法,即使在UITableView滚动时也能保持搜索栏位置不变。通过使用UISearchBar、UITableView及UISearchDisplayController,并结合Auto Layout约束调整,实现了流畅的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将searchBar和UITabelViewController可以实现如下图所示的搜索效果


但如果这样来写,在滚动tableview的时候,searchBar会也会随着tableview滚动,如果在tableview滚动的时候,searchBar固定,可以使用searchbar,UIViewcontroller和UITableView来实现

-(void)setupSearchBar
{
    UISearchBar *searchBar = [[UISearchBar alloc] init];
    searchBar.translatesAutoresizingMaskIntoConstraints = NO;
    self.searchBar = searchBar;
    self.searchBar.delegate = self;
    [self.view addSubview:searchBar];
}

-(void)setupContainerView
{
    <span style="font-family: Arial, Helvetica, sans-serif;">UITableView </span><span style="font-family: Arial, Helvetica, sans-serif;">*containerView = [[UITableView alloc] init];</span>
    containerView.translatesAutoresizingMaskIntoConstraints = NO;
    self.containerView = containerView;
    [self.view addSubview:containerView];
}

-(void)setupSearchDisplayController
{
    UISearchDisplayController *searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
    searchController.delegate = self;
    searchController.searchResultsDataSource = self;
    searchController.searchResultsDelegate = self;
    self.displayController = searchController;
}

-(void)setupConstraint
{
    NSDictionary *viewDict = @{@"containerView":self.containerView,
                               @"searchBar":self.searchBar};
    
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[searchBar]|" options:0 metrics:nil views:viewDict];
    [self.view addConstraints:constraints];
    
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchBar(44)]" options:0 metrics:nil views:viewDict];
    [self.view addConstraints:constraints];
    
    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:64.0f];
    [self.view addConstraint:constraint];
    self.searchBarVerticalContraint = constraint;
    
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[containerView]|" options:0 metrics:nil views:viewDict];
    [self.view addConstraints:constraints];
    
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[containerView]|" options:0 metrics:nil views:viewDict];
    [self.view addConstraints:constraints];
    
    constraint = [NSLayoutConstraint constraintWithItem:self.containerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:108.0f];
    [self.view addConstraint:constraint];
    self.tableViewVerticalConstraint = constraint;
}

-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    self.searchBarVerticalContraint.constant = 64.0f;
    self.tableViewVerticalConstraint.constant = 108.0f;
    
    return YES;
}

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    self.searchBarVerticalContraint.constant = 20.0f;
    [UIView animateWithDuration:0.3f delay:0.0f options:0 animations:^{
        [self.view layoutIfNeeded];
    } completion:nil];
    self.tableViewVerticalConstraint.constant = 64.0f;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值