2013-02-09 9 views
5

Ho tre UILabels nella mia dogana UITableViewCell. Potrebbe essere che qualche UILabels sarà vuota (label.text == @"")Auto Layout UILabels

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"EventCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


     NSString *key = [[keysArray objectAtIndex:indexPath.section] description]; 

     UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
     namelabel.text = @"Label 1"; 

     UILabel *locationLabel = (UILabel *)[cell viewWithTag:101]; 
     location.text = @"Label 2"; 

     UILabel *timeLabel = (UILabel *)[cell viewWithTag:102]; 
     timeLabel.text = @""; 

     return cell; 
} 

Come posso centrare tutti i non-vuoto UILabels verticalmente nella cella utilizzando la configurazione automatica?

Questo è come si guarda con tre etichette

This is how it looks with three labels:

Come appare quando uno dei UILables è vuoto

How it looks when one of <code>UILables</code> is empty

E questo è come voglio per vedere:

And this is how I want it to look:

+0

Stai costruendo la cella nel codice o nel builder dell'interfaccia? Perché è importante se le etichette sono vuote o no? – jrturton

+0

In IB. Voglio che le mie etichette siano centrate nel contenitore. Non è difficile da realizzare, ma quando una delle etichette è vuota, ottengo una lacuna tra altre due etichette che non sembrano belle – Oleg

+1

Questo potrebbe essere molto difficile, perché un UILabel vuoto forse non richiede larghezza ma certamente altezza, quindi potresti dover scrivere del codice sulla falsariga di 'una delle etichette è vuota, rimuovere quella etichetta'. – 11684

risposta

3

Questo è difficile da realizzare, ma un semplice collegamento può essere quello di avere una singola etichetta, invece, con tre righe di testo, vincolate ad occupare l'intera altezza della cella. L'etichetta centrerà automaticamente il suo contenuto verticalmente.

Avresti tre proprietà di stringa sulla cella anziché tre etichette ei tuoi setter avrebbero creato la stringa finale (utilizzando \n per le nuove linee) e impostato il testo dell'etichetta.

Se ogni riga di testo ha uno stile diverso, nessun problema, poiché è possibile utilizzare stringhe attribuite.

+0

Ottimo approccio! Farà come ti suggerisci. E userà le stringhe attribuite perché le mie etichette hanno uno stile diverso! Grazie! – Oleg

+0

In realtà stavo pensando che qualcuno suggerirà di aggiungere/modificare i vincoli a livello di codice, ma questa soluzione è molto più semplice! – Oleg

+0

La modifica dei vincoli è possibile, ma sicuramente più difficile che farlo in questo modo. Potrebbe anche influire sulle prestazioni di scorrimento come se si aggiungessero/rimuovessero le visualizzazioni secondarie o si modificasse il layout quando ciascuna cella viene visualizzata sullo schermo, entrambe operazioni costose. – jrturton

Problemi correlati