UITableView标头使用标准的UITableViewController在UINavigationBar下消失

时间:2014-02-26 09:56:07

标签: ios7 uiviewcontroller uitableview uisearchbar

我在UITableViewController内有一个UINavigationController。我添加了UISearchBar作为tableView.header

UISearchBar *searchBar = [UISearchBar alloc] initWithFrame: CGRectMake(0,0,self.tableView.frame.size.width,44.0)];
self.tableView.tableHeaderView = searchBar;

问题:滚动时,tableHeader会在navigationBar下消失。

我已经尝试设置navigationController.navigationBar.translucent = NO,但似乎这个技巧无法使用标准的UITableViewController。

有没有办法使用标准UITableViewController解决这个问题?我希望它与联系人应用程序中的完全一样。我的目标是iOS7。

1 个答案:

答案 0 :(得分:1)

我放弃使用UITableViewController,我使用标准UIViewController解决,其中UISearchBar位于顶部,UITableView位于其下方。通过设置self.edgesForExtendedLayout = UIRectEdgeNoneUISearchBar在搜索开始时不会与状态栏重叠:

-(id) initWithTableViewStyle: (int) tableViewStyle
{
    self = [super init];
    if (self) {

        //Set the UITableViewStyle
        self.tableViewStyle = tableViewStyle;

        //Be sure the searchBar won't overlap the status bar
        self.edgesForExtendedLayout = UIRectEdgeNone;

        //Add the subviews to the mainView
        [self.view addSubview:self.searchBar];
        [self.view addSubview:self.tableView];

        //Autolayout

        //Create the views dictionary
        NSDictionary *viewsDictionary = @{@"searchBar":self.searchBar,
                                          @"tableView": self.tableView};

        //Create the constraints using the visual language format
        [self.view addConstraints:[NSLayoutConstraint
                                   constraintsWithVisualFormat: @"H:|[searchBar]|"
                                   options:0
                                   metrics:nil
                                   views:viewsDictionary]];

        [self.view addConstraints:[NSLayoutConstraint
                                   constraintsWithVisualFormat: @"H:|[tableView]|"
                                   options:0
                                   metrics:nil
                                   views:viewsDictionary]];

        [self.view addConstraints:[NSLayoutConstraint
                                   constraintsWithVisualFormat:@"V:|[searchBar(==44)][tableView]|"
                                       options:0
                                       metrics:nil
                                       views:viewsDictionary]];
    }
    return self;

}

-(UITableView*) tableView
{
    if (!_tableView){

        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,0,0,0)
                                                  style:self.tableViewStyle];
        _tableView.translatesAutoresizingMaskIntoConstraints=NO;
        _tableView.delegate = self;
        _tableView.dataSource=self;
    }
    return _tableView;
}

-(UISearchBar*) searchBar
{
    if(!_searchBar){

        _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,0,0,0)];
        _searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
        _searchBar.translatesAutoresizingMaskIntoConstraints=NO;
        _searchBar.translucent = NO;
        _searchBar.delegate = self;
    }
    return _searchBar;
}

应该制作UIViewController:

UIViewController <NSFetchedResultsControllerDelegate,
                                          UISearchBarDelegate,
                                          UISearchDisplayDelegate,
                                          UITableViewDataSource,
                                          UITableViewDelegate>