2013-01-17 8 views
7

Ich habe Header mit diesem Beitrag gemacht: Table Header Views in StoryBoardsWie kann man UITable Header an den oberen Bildschirmrand halten, wenn man Storyboards benutzt?

Aber ich bin nicht in der Lage, Header-Stick (fix) an den oberen Rand des Bildschirms beim Scrollen zu machen.

Wie kann das erreicht werden?

P.S. Tabelle Stil ist einfach, und wenn ich müde zu überlasten viewForHeaderInSection und zurückgegebene Steckdose für die Header-Ansicht, es wurde nur schlimmer.

Vielen Dank im Voraus!

+0

Haben Sie jemals herausfinden, wie diese stattdessen mit Storyboard zu tun zu machen die Ansicht im Code? –

+0

Ich habe es herausgefunden: http://Stackoverflow.com/a/23717919/1438339 –

Antwort

2

ich war in der Lage, es zu tun (zumindest in iOS 6) wie diese, weiß nicht, warum dieses Ding funktioniert :)

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    if(self.headerManualView == nil) { 
     //allocate the view if it doesn't exist yet 
     headerManualView = [[UIView alloc] init]; 

     //create the button 
     UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(10, 3, 250, 44)]; 

     //the button should be as big as a table view cell 
     txtField.borderStyle = UITextBorderStyleRoundedRect; 

     //set action of the button 
     //[txtField addTarget:self action:@selector(removeAction:) forControlEvents:UIControlEventTouchUpInside]; 

     //add the button to the view 
     [headerManualView addSubview:txtField]; 
    } 

    //return the view for the footer 
    return headerManualView; 
} 
9

Hier ist der Code, den ich glaube, dass der Top-Kopfsicht-Stick auf die Tabelle macht (also nicht, dass es das Standardverhalten):

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGRect rect = self.tableHeaderView.frame; 
    rect.origin.y = MIN(0, self.tableView.contentOffset.y); 
    self.tableHeaderView.frame = rect; 
} 

Eine Alternative ist die Kopfsicht für den ersten Abschnitt haben. Sie können keine Unteransicht unter viewForHeaderInSection verwenden, Sie müssen dort die Ansicht zurückgeben, die noch nicht in der Hierarchie der Ansichten ist. Der Vorteil der Methode besteht darin, dass die Abschnittsheaderansicht so gestaltet ist, dass sie sich an der Tabellenoberseite befindet. Der Nachteil besteht darin, dass Sie möglicherweise Header für Abschnitte in dem Feature haben möchten. Dadurch wird die Lösung durchbrochen.

+0

Ich habe Ihren Code versucht - sieht aus wie es für mich nicht funktioniert (ich habe MAX statt MIN BTW). Seltsam. – Egor

+0

@Egor Wird es aufgerufen? –

+0

natürlich, ich habe es an erster Stelle überprüft) – Egor

1

Ich denke, es ist besser für Sie, einen UIViewController statt eines UITableViewController im Storyboard zu verwenden, um dies zu erreichen. Setzen Sie einfach eine Kopfzeile oben im Storyboard in die Ansicht und legen Sie eine UITableView unter die Kopfzeile.

+0

Ich kann darauf zurückgreifen, aber es ist seltsam, dass die übliche Kopfzeile an der Spitze bleibt und die, die per Drag-Drop im Storyboard hinzugefügt wird, nicht. – Egor

+0

@Egor Die Header-Ansicht von tableView bleibt nicht an der Spitze, unabhängig davon, wie Sie sie festgelegt haben. Und ich glaube nicht, dass die ViewController-Klasse einen Unterschied macht. Wenn Sie die Ansicht über die TableView setzen, hat sie keinen Bounce-Scroll-Effekt, was nicht nett ist. –

+0

seltsam, weil es geklebt, wenn ich TableView viewForHeaderInSection verwendet: (NSInteger) Abschnitt für diesen Zweck - mit diesem Beispiel http://blog.blackwhale.at/?p=104 – Egor