2011-05-26 29 views
6

我在根视图控制器中使用下面的代码来隐藏UITableView的标题(标题中有一个UISearchbar)。它在应用程序启动并显示tableView时起作用。然而,之后,当选择一行时,会推送详细视图,并且用户弹出详细视图,则uitableview头现在可以在根视图中显示,而不是我所期望的。iOS UITableView contentOffSet不再隐藏从推送的详细视图返回的标题

这里的相关功能:

- (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动画:动画];'肯定是问题的一部分,因为没有它,代码工作,并且tableView标题滚动出视图。然而,对根视图的要求是要隐藏导航栏,但在详细视图中显示。

回答

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

你对viewDidLoad的代码行应该是'savedContentOffsetY',对吗? 否则这段代码看起来不错,我会尽快接受它作为答案。 – kris 2011-06-15 13:53:40

+0

好找,堪察加。看起来像'performSelector'使您能够利用viewWillAppear的动画来解决一些时间挑战。 – kris 2011-06-16 13:41:42

+0

感谢您接收错字,现在修复。 – Kamchatka 2011-06-18 22:54:00

1

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

self.edgesForExtendedLayout = UIRectEdgeNone; 
相关问题