2014-04-23 7 views
5

Ho un controller di visualizzazione, in cui la vista ha due visualizzazioni di immagine e due visualizzazioni di testo. Ho disattivato il layout automatico e ho impostato a livello di codice la distanza tra la prima visualizzazione di testo e la prima visualizzazione dell'immagine utilizzando questo codice: Il seguente codice è nel metodo viewDidLoad della mia classe di controller di visualizzazione personalizzata. Ho impostato la maschera autoresizing su no in entrambi i casi, quindi non ho idea del perché il codice non funzioni. (tf2_logo è la vista dell'immagine e itemName è la vista di testo)I vincoli non funzionano con UITextView

self.tf2_logo.translatesAutoresizingMaskIntoConstraints = NO; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeTop multiplier:1.0 constant:-1.0]]; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2_logo attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backpackBackground attribute:NSLayoutAttributeLeft multiplier:1.0 constant:17]]; 

Ora voglio fare la stessa cosa con la mia altra vista del testo, in fondo ho voluto mantenere la distanza tra il testo vista itemName e il testo guarda ad una certa distanza. Ho usato questo codice: (TF2 è la mia altra vista del testo)

self.tf2.translatesAutoresizingMaskIntoConstraints = NO; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2 attribute:NSLayoutAttributeTop multiplier:1.0 constant:-3.0]]; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeRight multiplier:1.0 constant:20]]; 

Dopo l'implementazione di questo codice, la visualizzazione del testo TF2 non ha nemmeno compare nel controller della vista. Qual è il problema?

EDIT: è possibile scaricare l'intero progetto qui: https://www.dropbox.com/sh/u820u2ndyrncuz8/P4atI-9CAx

risposta

2

EDIT # 2: Lei ha detto che si disattivato layout automatico, perché UITextView ha quel po 'di gap in cima a iOS7. Per rimuovere il gap, provate questo:

self.tf1.textContainerInset = UIEdgeInsetsZero; 

Quando si accede al valore originale del textContainerInset mostra: {8, 0, 8, 0}. I due 8 sono responsabili per il divario (uno in alto). La riga sopra imposta tutti i valori su zero e il contenuto è allineato correttamente alla parte superiore del fotogramma.

(EDIT # 1: completamente cambiato la risposta)

Presumo che in primo luogo vuole avere un'altezza flessibile del imageNameUITextView. Per prima cosa suggerisco di usare il layout automatico. È possibile impostare i vincoli in Xcode secondo la seguente immagine:

Constraints

Le linee rosse sono i vincoli. La linea verde è speciale: deve essere un vincolo di altezza e si crea una presa per esso nel controller della vista. (Aprire la visualizzazione del documento contorno, individuare il vincolo di altezza nella struttura ed il controllo trascinare al codice.)

Poi nel metodo viewDidLoad:

CGSize size = [self.tf1 sizeThatFits:self.tf1.frame.size]; 
self.tf1Height.constant = size.height; 

L'altezza del campo "lore ipsum" ora si adatta al suo contenuto.

Screenshot

+0

È possibile scaricare il progetto qui: https: //www.dropbox.com/sh/u820u2ndyrncuz8/P4atI-9CAx –

+0

Non volevo usare l'autolayout perché per UITextView sotto UIImageView di grandi dimensioni, volevo che il testo iniziasse nella parte superiore della vista testo, e non nel mezzo come normalmente indicato da xcode. Ho cercato come farlo su Stackoverflow e l'utente mi ha suggerito di disattivare l'autolayout. –

+0

Puoi fornire maggiori dettagli sul problema dell'inserimento di testo? Con i miei test su UITextView il testo si trova in alto (con UILabels si trova nel centro verticale). –

-3

Hai provato a usare frame invece di vincoli? Se non usi l'autolayout, penso che i frame potrebbero essere più facili da leggere/implementare.

campione:

// tf2 will be placed at (0,0) in superview and have width of 100 and height of 20 

tf2.frame = CGRectMake(0, 0, 100, 20); 

si può giocare con valori diversi per ottenere il layout, se lo desideri.

+0

Penso che tu abbia ragione che sono più facili, ma non è lo stesso funzionalità. – sammysounder