IOS UITableView contentOffSet不再隐藏从推送详细信息视图返回的标头

时间:2011-05-26 19:17:53

标签: iphone ios uitableview header hidden

我在根视图控制器中使用下面的代码来隐藏UITableView的标头(标头中有一个UISearchbar)。它在应用程序启动时显示并显示tableView ..但是之后,当选择一行时,将推送详细视图,并且用户弹出详细视图,uitableview标头现在在根视图中可见,这不是我的期望。

以下是相关功能:

- (void) viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
    self.tableView.contentOffset 
     = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height);
    //it's as if the line above is ignored on when returning from a pushed detail view    
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // theContentOffSet works when I put it hear, but then the user can see it which is not desired    
}

第'[self.navigationController setNavigationBarHidden:YES animated:animated];'肯定是问题的一部分,因为没有它,代码工作,tableView标题滚动出视图。但是,根视图的要求是隐藏导航栏,但在详细视图中显示。

2 个答案:

答案 0 :(得分:16)

环顾四周后,我发现以下帖子https://devforums.apple.com/message/315519#315519解决了这个问题。

-(void)viewWillAppear:(BOOL)animated
{
    [self performSelector:@selector(updateContentOffset) withObject:nil afterDelay:0.0];
}

- (void)updateContentOffset
{
    self.tableView.contentOffset = CGPointMake(0, savedContentOffsetY);
}

当然,在viewWillDisappear中,您可以按以下方式保存内容偏移量:

savedContentOffsetY = self.tableView.contentOffset.y;

viewDidLoad

savedContentOffsetY = self.tableView.tableHeaderView.frame.size.height;

答案 1 :(得分:1)

我有搜索并尝试了很多,但没有任何帮助。最后,以下代码帮助了我。您可以在viewDidLoad()方法中添加代码:

self.edgesForExtendedLayout = UIRectEdgeNone;