2015-08-21 20 views
3

我想实现一个类似于联系人iOS应用程序的用户界面,在那里你有一个UISearchBar锚定在表视图的顶部(如果你添加它作为表视图标题它会与内容一起滚动),并且当您开始搜索时,搜索栏会占据导航栏的空间。使UISearchBar不滚动像在联系人应用程序

我正在使用UISearchController的搜索栏。

已尝试在表视图顶部添加容器视图,并以编程方式向其添加搜索栏,但问题是当搜索栏转到导航栏的位置时(由UISearchController自动完成)其宽度大于屏幕... enter image description here

这在模拟器和设备中都会发生。

任何(最好不哈克)的方式来实现这一点?

回答

1

不要使用UITableViewController,使用标准UIViewController并添加searchBartableview自己。

下面是一个示例代码:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UISearchBar *searchBar = [[UISearchBar alloc] init]; 
    searchBar.translatesAutoresizingMaskIntoConstraints = NO; 
    searchBar.delegate = self; 
    [searchBar sizeToFit]; 

    UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; 
    tableView.translatesAutoresizingMaskIntoConstraints = NO; 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    tableView.contentInset = UIEdgeInsetsMake(searchBar.frame.size.height, 0.0, 0.0, 0.0); 
    [tableView reloadData]; 

    [self.view addSubview:tableView]; 
    [self.view addSubview:searchBar]; 

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:searchBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:searchBar attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:searchBar attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]]; 

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:tableView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:tableView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]]; 
} 
相关问题