2009-08-20 11 views
7

Ho un numero di righe che sto inserendo in una tabella usando -insertRowsAtIndexPaths: withRowAnimation, e vorrei che le righe fossero rientrate da sinistra per distinguerle dal resto delle celle. La proprietà indentationLevel di UITableViewCell sembra esattamente ciò di cui ho bisogno, ma sembra che non faccia nulla. Ecco il codice che sto usando per impostare il livello di rientro (sintassi del punto non fa differenza):La proprietà indentationLevel non sembra fare nulla?

[cell setIndentationWidth:10]; 
[cell setIndentationLevel:1]; 

è indentationLevel quello che voglio, o devo essere in cerca altrove?

risposta

0

Tutto quello che ho letto suggerisce è come si suppone che tu lo faccia. Assicurati di non creare una nuova cella con lo stesso puntatore più avanti nel codice (dopo aver impostato il rientro, ma prima che venga disegnato). Hai provato a impostare l'indentazione su qualcosa di più grande che sarebbe più evidente sullo schermo (ad esempio, 100px invece di 10)?

+0

Quando si dice puntatore, non si riferisce alla identificatore, vero? Le mie celle sono tutti oggetti della stessa classe, quindi immagino che siano tutti puntatori allo stesso oggetto. L'identificatore di cella, tuttavia, si basa sull'indice completo e pertanto è univoco per ogni cella. Non c'è ancora gioia per il rientro, comunque. – JoBu1324

+0

Ho confermato che il livello di indentazione e la larghezza vengono impostati nella cella prima che la cella venga restituita al sistema operativo per la visualizzazione. Cosa potrebbe andare storto? – JoBu1324

1

È possibile che tu stia superando la sua implementazione nelle tue celle. in

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     if (cell == nil) 
     { 
      cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
      [cell setIndentationLevel:indexPath.row]; 
      [cell setIndentationWidth:10]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      // Tag the view 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
      UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
     } 
    } 
14

indentationLevel e indentationWidth influenzano il posizionamento degli elementi standard textLabel, detailTextLabel e ImageView. Non influenzano l'origine del frame di contentView.

Se non si utilizza textLabel, ecc. (Forse perché si tratta di iPhone OS 2), è necessario gestire manualmente il rientro, come mostra la risposta precedente.

1

Ho riscontrato un problema simile con la mia app. Ho avuto un UITableView che NON stava usando le celle personalizzate. Stavo usando uno UITableViewCell con uno stile di base. Nel mio metodo delegato - (UITableViewCell *)tableView: cellForRowAtIndexPath: ho impostato la cella indentationWidth e indentationLevel. Non hanno fatto nulla. Ho anche provato a modificare il metodo delegato - (NSInteger)tableView: indentationLevelForRowAtIndexPath:. Niente.

Ciò che alla fine funzionava era andare allo storyboard e modificare gli attributi della stessa cella di visualizzazione tabella. Una volta impostato l'Indentation Width, ho iniziato a ottenere il rientro corretto. La proprietà indentationLevel ha iniziato a funzionare. Anche lo - (NSInteger)tableView: indentationLevelForRowAtIndexPath: è stato utile.

Fondamentalmente, sembra che la proprietà indentationWidth venga ignorata in favore della "Larghezza indentazione" nello storyboard.

questo era con Xcode 5.0.2 rivolti iOS 7.

3

Questo sembra essere un bug in iOS 7, se non si utilizza celle personalizzate.

impostazione di entrambi indentationLevel o indentationWidth entro tableView:cellForRowAtIndexPath: non ha alcun effetto sulla rappresentazione della cellula quando è il momento di visualizzarlo.

Ad esempio, si consideri il seguente codice:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    BOOL isIndented = indexPath.row % 2; 

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented"; 
    cell.indentationLevel = isIndented; 
} 

io non ho abbastanza reputazione di inviare screenshot, ma il risultato è diverso tra iOS 6 e iOS 7. Questo sta usando Xcode 5 e iOS 7 SDK.

+0

Potete fornire soluzioni o soluzioni alternative? –

+2

La soluzione alternativa consiste nell'utilizzare una cella personalizzata, anche se deve emulare uno stile di cella predefinito. Basta creare una nuova sottoclasse di UITableViewCell e seconda se si sta utilizzando storyboard o file pennino, configurare un prototipo di cella o di registrare un file di pennino, rispettivamente, per l'utilizzo da parte vostra sottoclasse di cellule. – Skyboat

0

So che questa domanda è di 4 anni, ma se si è già utilizzando una sottoclasse personalizzata di UITableViewCell, e sei già aggiungere le vostre opinioni come subviews di contentView assicurarsi che non sta ignorando layoutSubviews in la tua cella. Se si, è necessario regolare il limite/Centro o del telaio del contentView manualmente, in layoutSubviews.

Problemi correlati