2010-11-29 9 views
26

Ich habe eine Tabelle mit Plain-Stil und nur einen Abschnitt. Ich habe ein implementiertes viewForHeaderInSection:, um eine benutzerdefinierte Ansicht in der Abschnittsüberschrift hinzuzufügen.Trennung zwischen Kopfzeile und erste Zelle - Im einfachen UITableView

Ich bin nicht in der Lage, eine Trennlinie zwischen meiner Tabellenabschnitt Header-Ansicht und meiner ersten Zelle zu sehen. [Siehe die beigefügten Bild]

alt text

Was mache ich falsch?

Antwort

29

Benutzerdefinierte Kopf- und Fußzeilen enthalten keine Trennzeichen darunter/darüber. Sie müssen das Trennzeichen selbst in der benutzerdefinierten Ansicht implementieren (oder zu einem gruppierten Stil wechseln, der die Gliederung der Gruppe darüber und darunter sogar mit einer benutzerdefinierten Kopf-/Fußzeile anzeigt).

+0

Zum gruppierten Stil umschalten machte den Trick. –

+0

Wie zum gruppierten Stil wechseln? – Imran

+0

kann ich die Höhe des Separators entfernen/erhöhen? – Nil

40

Wie Jeremy in seiner Antwort bemerkt, fügt iOS keine Trennzeichen oberhalb/unterhalb der Kopf-/Fußzeilen ein. Sie können einfach eine UIView verwenden, um selbst eine Zeile zu erstellen.

Hier ist der Code, um einen Standard-Suche Separator Blick auf eine Kopfansicht hinzuzufügen:

CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1); 
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease]; 
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0]; 
[headerView addSubview:seperatorView]; 

Wenn Sie versuchen, es wie eine normale Tabelle Ansicht Zelle aussehen zu lassen, müssen Sie wahrscheinlich ein an der hinzufügen auch oben in der Kopfzeile.

+1

Danke, nützliches Code-Snippet. Für alle, die interessiert sind, habe ich in meiner View-Klasse für meine benutzerdefinierte Kopfzeile in der wakeFromNib() -Methode platziert. – Tim

+0

@Jeff ich tat das Gleiche. –

9

, wenn Sie Raum geben wollen, nur zwischen Tabellenkopf und Tabelle erster Reihe, dann können Sie

In Verfahren von tableView:heightForHeaderInSection:(NSInteger)section

if(section ==0) 
    return 3; // (space u want to give between header and first row); 

return 10; //(ur section header height) 

In Verfahren von tableView:viewForHeaderInSection:(NSInteger)section

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)]; 
    headerView.backgroundColor = [UIColor clearColor]; // use your own design 

    return headerView; 
5

Add einer zusätzliche "versteckte" Zeile zu dem Abschnitt, dem Sie das Trennzeichen hinzufügen möchten, indem Sie +1 die vorhandene Anzahl der Zeilen inzurückgeben. Dann die folgende Methode hinzu:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow) 
     return 0.f; 
    else 
     return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

Wenn Sie das Trennzeichen an der Spitze eines Abschnitts wollen (nach einem Header), werden indexOfHiddenRow0 sein. Wenn Sie es am Ende eines Abschnitts (vor einer Fußzeile) möchten, wird es [self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1 sein.

Jetzt innerhalb tableView:cellForRowAtIndexPath:, geben Sie einfach [UITableViewCell new] für die versteckte Zeile (es wird nicht angezeigt werden, so dass keine Notwendigkeit, einen Rahmen oder irgendetwas). Sie müssen möglicherweise einige -1 Indexanpassungen in Ihren UITableViewDataSource und UITableViewDelegate Methoden vornehmen, aber es funktioniert (getestet in iOS 7), und garantiert konsistente Styling (keine Notwendigkeit, Ihre eigenen "Fälschung" Separator-das ist ein echtes System- zeichnen gezeichnet UITableView Separator).

+1

Das ist eigentlich der richtige Weg. Gerade getestet und es funktioniert. –

+1

OK, der Teil mit konsequentem Styling hat mich überzeugt. +1 –

+0

scheint wie ein Hack, aber brillante Idee! –

1

Fügen Sie ein Trennzeichen zwischen Header-Ansicht und erster Zeile hinzu: - In der Ansicht für Header im Abschnitt Delegate-Methode fügen Sie eine Unteransicht ein self.separator // @ property (nichtatomisch, stark) UIImageView * separator;

- (CGFloat)tableView:(UITableView *)tableView 
heightForHeaderInSection:(NSInteger)section { 

return 41; 
} 


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

self.headerView = [[UIView alloc] init]; 
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR]; 

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]]; 
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1); 
[self.headerView addSubview:self.separator]; 
return self.headerView; 

} 
1

Ich habe UITableViewCell mit ein paar Trennmethoden (in Swift) erweitert. Mit ihnen kann ich Separatoren zu Überschriften hinzufügen oder sie aus regulären Zellen entfernen. Ich hoffe, dass es einigen Leuten helfen kann.

public extension UITableViewCell 
{ 
    func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor) 
    { 
     let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7); 
     let seperatorView = UIView(frame: sepFrame); 
     seperatorView.backgroundColor = color; 
     self.addSubview(seperatorView); 
    } 

    public func addTopSeparator(tableView: UITableView) 
    { 
     let margin = tableView.separatorInset.left; 

     self.addSeparator(0, margin: margin, color: tableView.separatorColor!); 
    } 

    public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat) 
    { 
     let margin = tableView.separatorInset.left; 

     self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!); 
    } 

    public func removeSeparator(width: CGFloat) 
    { 
     self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0); 
    } 

} 
Verwandte Themen