2014-10-09 14 views
5

Ho un UITableView che utilizza il layout automatico. Ho diversi tipi di celle, ma per ora usiamo il più semplice di tutti, uno che ha solo un UILabel.Rimuovi padding/margine UILabel durante l'utilizzo del layout automatico

In tableView:heightForRowAtIndexPath: ho il seguente codice:

[self configureCell:self.detailsCell forRowAtIndexPath:indexPath]; 
    [self.detailsCell layoutIfNeeded]; 

    CGSize size = [self.detailsCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1; 

, che a sua volta chiama

- (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // ... 
    cell.detailsLabel.text = self.data.myText; 
    cell.detailsLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
    // [cell.detailsLabel sizeToFit]; <- I tried this, but didn't help 
} 

Interface builder screenshot

e finisce per ottenere questo:

Actual cell

Il rettangolo verde è la cella effettiva. Il rettangolo viola è l'UILabel. Non voglio la parte superiore e inferiore viola padding/margine. Come posso liberarmene?

+0

Sembra che tu abbia costanti con questi margini di installazione nello storyboard. Quindi si comporta esattamente come dovrebbe. – sha

+1

Questi margini sono quelli verdi .. Non vuole il padding all'interno dell'etichetta stessa. – Paludis

risposta

0

È possibile aggiungere il centro orizzontale a UILabel. Quindi imposta "Maggiore o uguale a" in relazione "spazio superiore a superview" e imposta lo spazio inferiore nello stesso modo. Costruisci ed esegui, e puoi vedere che l'altezza dinamica di UILabel è conforme al contenuto di UILabel.

-1

I margini sono dovuti ai vincoli di autolayout impostati. Imposta tutti i margini a zero nella finestra di ispezione dimensioni.

Se si utilizza il supporto Xcode 6 & iOS 8, i vincoli potrebbero essere impostati su "margine contenitore" anziché "contenitore" stesso. È leggermente diverso e impostare un margine per il contenitore a zero funzionerà per te. Puoi passare da una all'altra quando imposti i vincoli nello storyboard premendo "Alt".

+1

Questi margini sono al di fuori dell'etichetta, la domanda riguarda il riempimento all'interno dell'etichetta. – Paludis

5

dovete essere attenti di "Vincola per i margini:"

confrontare queste due immagini: Constrain to margins = YES e Constrain to marings = NO

così deselezionando "constrian margini", mentre l'aggiunta di nuovi vincoli, dovrebbe risolvi il problema di padding/margin :-)

Se lo desideri, puoi visualizzare questi margini con "Editor/Canvas/Mostra rettangoli di layout" The View senza i rettangoli di layout: Show Layout rectangles = NO e layout rettangoli impostati per mostrare (che illustra il problema abbastanza buona) Show Layout rectangles = YES

+0

Purtroppo ho provato questo. Quello che ho visto è che il padding non è deterministico. A volte è più alto di altri ... anche se sembra che ci sia più testo, il padding diventa più grande. – Eric

+0

Mh ... forse i tuoi vincoli stanno sottostimando il layout (non sono sicuro del perché, ma forse). Per verificare ciò basta digitare 'po [[UIWindow keyWindow] _autolayoutTrace]' quando viene messo in pausa nel debugger. Oppure, d'altra parte, prova a impostare l'opzione 'preferredMaxLayoutWidth'.Questo è importante perché è la larghezza alla quale l'etichetta smetterà di crescere orizzontalmente e inizierà a crescere verticalmente. @Eric – Flori

Problemi correlati