2011-05-26 13 views
6

UITableView'ın başlığını gizlemek için kök görünümü denetleyicisinde aşağıdaki kodu kullanıyorum (üstbilgisinde bir UISearchbar vardır). Uygulama başlatıldığında ve tabloyu görüntülediğinde çalışır .. Ancak, daha sonra, bir satır seçildiğinde, ayrıntı görünümü itilir ve kullanıcı ayrıntı görünümünü çıkarır, uitableview başlığı şimdi kök görünümünde görünür değildir, Beklediğim.IOS UITableView contentOffSet artık itme detay görünümünden başlığını gizlemiyor

İşte önemli fonksiyonlar var:

- (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  
} 

hat '[self.navigationController setNavigationBarHidden: EVET animasyonlu: animasyonlu];' kesinlikle sorun değil, kodsuz çalışır ve tableView başlığı görünüm dışı olarak kaydırılır. Ancak kök görünüm gereksinimi, gezinme çubuğunun gizlenmesi, ancak ayrıntı görünümünde gösterilmesidir.

cevap

16

Bir süredir etrafa baktıktan sonra, bu sorunu çözen aşağıdaki yazıyı https://devforums.apple.com/message/315519#315519 buldum. Eğer aşağıdaki gibi ofset içeriği kaydedebilirsiniz viewWillDisappear yılında Elbette

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

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

:

savedContentOffsetY = self.tableView.contentOffset.y; 

Ve de senin viewDidLoad,

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

sen 'savedContentOffsetY' olmalıdır viewDidLoad için sahip kod satırını: Senin içinde viewDidLoad() yöntemini kod ekleyebilirsiniz? Aksi taktirde bu kod harika görünüyor, denemek için en kısa sürede cevap olarak kabul edeceğim. – kris

+0

İyi bul, Kamçatka. Görünüşe göre 'performSelector', viewWillAppear – kris

+0

ile sahip olduğunuz animasyonla zamanlama zorluklarını çözmenizi sağlar. Hemen yazılan yazım hatası yakaladığınız için teşekkür ederiz. – Kamchatka

1

ben aramak zorunda ve bir çok başka bir şey yardıma çalıştı . Sonunda aşağıdaki kod bana yardımcı oldu. Doğru,

self.edgesForExtendedLayout = UIRectEdgeNone; 
İlgili konular