状态栏与UITableView混合使用

时间:2016-10-03 20:23:46

标签: ios objective-c uitableview uinavigationcontroller statusbar

我有UITableviewController,它包含顶部的搜索栏和下面的表行。我已将导航栏设置为隐藏,并将视图从顶部放置20 px以占据状态栏。

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];

        self.navigationController.navigationBar.hidden = YES;
        UIApplication *app = [UIApplication sharedApplication];
        if(!app.statusBarHidden) {
            [self.view setFrame:CGRectMake(0.0,app.statusBarFrame.size.height, self.view.bounds.size.width, self.view.bounds.size.height - app.statusBarFrame.size.height)];
        }}

这很有效。首次加载视图时,状态栏和视图显示正常。

view after first load

但是,如果我点击其中一个表格,则会转换为新的推送视图。从新视图返回到包含tableview的视图时,状态栏与tableviewcontroller视图混合。

view after second load

调用viewdidappear但它没有效果。有没有更好的方法呢?在我的其他一个视图中,我在故事板中手动添加了20 px。但是,使用这个tableviewcontroller,我无法找到一种方法。欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

这对我有用。

    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        self.navigationController.navigationBar.hidden = YES;
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
            self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
        }
        [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
    }

答案 1 :(得分:0)

而不是tableViewController取一个UIViewController,里面拿一个searchBar在它上面,一个tableView下面就可以解决你的问题