2010-11-29 17 views
26

Ho una tabella con stile normale e una sola sezione. Ho implementato viewForHeaderInSection: per aggiungere una vista personalizzata nell'intestazione della sezione.Separazione tra intestazione e prima cella - In chiaro UITableView

Non riesco a vedere una linea di separazione tra la vista dell'intestazione della sezione della tabella e la mia prima cella . [Vedere l'immagine allegata]

alt text

Che cosa sto facendo di sbagliato?

risposta

29

Le intestazioni e i piè di pagina personalizzati non contengono separatori sotto/sopra di essi. Dovrai implementare il separatore tu stesso nella visualizzazione personalizzata (o passare allo stile raggruppato, che mostrerà il profilo del gruppo sopra e sotto di esso anche con un'intestazione/piè di pagina personalizzata).

+0

Passare allo stile raggruppato ha fatto il trucco. –

+0

Come passare allo stile raggruppato? – Imran

+0

posso rimuovere/diminuire l'altezza del separatore? – Nil

40

Come osserva Jeremy nella sua risposta, iOS non aggiunge separatori sopra/sotto le intestazioni/i piè di pagina; puoi semplicemente usare un UIView per creare una linea tu stesso.

Ecco il codice per aggiungere un guardando vista standard separatore per una vista di testa:

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]; 

Se stai cercando di farlo apparire come un normale cella di visualizzazione per tabella, probabilmente bisogno di aggiungere uno alla in cima alla visualizzazione dell'intestazione.

+1

Grazie, utile snippet di codice. Per chiunque sia interessato, ho inserito nella mia classe View la mia intestazione personalizzata nel metodo awakeFromNib(). – Tim

+0

@Jeff ho fatto lo stesso. –

9

se si vuole dare spazio solo tra intestazione della tabella e la tabella prima fila quindi è possibile utilizzare

Nel metodo 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) 

Nel metodo 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

Aggiungi un ulteriore riga "nascosta" alla sezione a cui si desidera aggiungere il separatore restituendo +1 il numero esistente di righe in tableView:numberOfRowsInSection:. Quindi aggiungere il seguente metodo:

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

Se si desidera che il separatore nella parte superiore di una sezione (dopo un colpo di testa), indexOfHiddenRow sarà 0. Se lo vuoi in fondo a una sezione (prima di un piè di pagina) sarà [self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1.

Ora all'interno di tableView:cellForRowAtIndexPath:, è sufficiente restituire [UITableViewCell new] per la riga nascosta (non verrà visualizzato, quindi non è necessario impostare una cornice o altro). Potrebbe essere necessario effettuare alcune rettifiche dell'indice -1 nei metodi UITableViewDataSource e UITableViewDelegate, ma funziona (testato in iOS 7), e garantisce uno stile coerente (non è necessario disegnare il proprio separatore "falso" - questo è un vero sistema- disegnato separatore UITableView).

+1

Questo è in realtà il modo corretto. Appena testato e funziona –

+1

OK, quella parte con uno stile coerente mi ha convinto. +1 –

+0

sembra un trucco ma un'idea geniale! –

1

Aggiungere un separatore tra la vista dell'intestazione e la prima riga: - In vista per il metodo delega delegato sezione aggiungere una vista secondaria self.separator // @ property (nonatomic, strong) 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

Ho esteso UITableViewCell con un paio di metodi separatori (in Swift). Con loro posso aggiungere separatori alle intestazioni o rimuoverle dalle celle normali. Spero che possa aiutare alcune persone.

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); 
    } 

} 
Problemi correlati