2015-08-28 3 views
8

Ho uno UILabel per la descrizione dell'oggetto tra le altre viste, tutte disposte utilizzando i vincoli in Interface Builder - è possibile visualizzare tutti i vincoli pertinenti nell'immagine sottostante. Anche il numero di righe è impostato su 0.AutoLayout impostazione UILabel altezza a zero

enter image description here

non hanno fissato il vincolo di altezza perché voglio il UILabel per ridimensionare in base al testo che contiene. Invece, quello che succede è giusto dopo

[self.view layoutIfNeeded]; 

si chiama, l'altezza del UILabel viene impostato su 0. Anche se non ho impostato altro testo su UILabel, ha un valore predefinito di Descrizione articolo impostato in Interface Builder.

L'etichetta del titolo dell'articolo sopra è impostata allo stesso modo, ma quella non viene schiacciata a 0, quindi sono un po 'confuso.

Qualcuno ha avuto esperienza con un comportamento del genere?

+0

Si verificano errori di vincolo AutoLayout nella console? AutoLayout elimina alcuni vincoli a causa di conflitti? – Alex

+0

No, nessuno per niente – artooras

+0

So che non vuoi raggiungere l'altezza di quella UILabel, ma cosa succede se lo fai? Si verificano conflitti di vincoli di AutoLayout nella console? – Alex

risposta

10

sono riuscito a risolverlo impostando il UILabel s' vertical compression resistance priority-1000 (default 750) in Interface Builder.

enter image description here

Dal mio punto di vista sono incorporati in un'altra vista, e in basso della vista padre dipende dalla parte inferiore della vista infantile più basso, ho solo ipotizzare che il UILabel senza un vincolo di altezza è stato sempre spremuto nel processo di stabilire le opinioni. Probabilmente giocare con priorità di altri vincoli da qualche parte lungo la catena avrebbe prodotto lo stesso risultato, ma non ero in grado di farlo con successo. La soluzione sopra, tuttavia, ha funzionato, che è abbastanza buono nel mio caso.

Spero che questo aiuti qualcuno.

0

Set 3 vincolo di spazio

1.Leading a Superview

spazio 2.Trailing a Superview

spazio

3.Top a Superview

poi

@property (nonatomic, strong) IBOutlet UILabel *lbl; 

- (void) viewDidLoad{ 
    [self.lbl sizeToFit]; 
} 
+1

I miei vincoli sono come hai suggerito, tranne che ho bisogno di quello in basso per spingere verso il basso altre viste se l'etichetta diventa troppo alta. Tuttavia, sono riuscito a risolvere il mio problema impostando la priorità di resistenza alla compressione verticale di UILabel su 1000 (predefinito 750). – artooras

0

ctrl trascina dall'etichetta su se stesso> seleziona altezza> imposta la consta nt dell'altezza a 0 e cambiare uguale (==) per maggiore o equeal (> =)

+0

Questo ha fatto sì che fosse sufficiente per almeno una riga di testo, ma il resto è troncato, cioè l'etichetta non è autorizzata – artooras

+0

Assicurati che il vincolo di fondo sia corretto, perché questo è il modo di farlo :-) Modifica: provalo rimuovendo il vincolo di fondo per testarlo. –

+0

Ok, quindi sembra che tu l'abbia corretto cambiando l'abbraccio a 1000. È stato questo grazie all'aggiunta del mio vincolo o qualcosa che hai aggiunto? Ad ogni modo, controlla qualcosa come la risposta corretta. –

0

Credo che è necessario impostare 5 vincoli sull'etichetta:

  • Leading spazio per Superview
  • Trailing spazio per Superview
  • spazio verticale a "Item"
  • spazio verticale a "Nome"
  • Altezza

Quindi aggiungere un IBOutlet nel controller sull'altezza del vincolo (diciamo labelHeight).

Quindi nel tuo viewDidLoad si sarà in grado di impostare questo valore vincolo:

@property (weak, nonatomic) IBOutlet UILabel *label; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *labelHeight; 


- (void) viewDidLoad{ 
    [self.label sizeToFit]; 
    labelHeight.constant = self.label.frame.size.height; 
} 
1

AutoLayout in questo UIViewController non può soddisfare tutte le constraints è stata impostata, quindi respingere quelle sul vostro UILabel, con conseguente uno stato compresso. Dovresti dare un'occhiata agli altri constraints nel tuo UIViewController, e impostare lo dello height contraint ad un numero più alto.