2013-07-16 6 views
5

Ho una vista di scorrimento nella mia app, inizializzata tramite lo storyboard, e sto tentando di cambiare la cornice. Tutto sembra funzionare, ma se si accede al frame e alla dimensione del contenuto poco tempo dopo che sono stati impostati, ma dopo che il mio metodo è tornato, sono diversi! Ecco il codice:UIScrollView che cambia misteriosamente la dimensione del fotogramma e del contenuto

CGFloat inputHeight = inputView.frame.size.height; 
originalContentHeight = self.scrollableContentView.frame.size.height; 
NSLog(@"%f", self.scrollableContentView.frame.size.height-inputHeight); 
[self.scrollableContentView setFrame:CGRectMake(self.scrollableContentView.frame.origin.x, self.scrollableContentView.frame.origin.y, self.scrollableContentView.frame.size.width, self.scrollableContentView.frame.size.height-inputHeight)]; 
NSLog(@"%f", self.scrollableContentView.frame.size.height); 
NSLog(@"%@", self.scrollableContentView); 

L'output di questi registri sono tutti come previsto, cioè:

<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... > 

Tuttavia, se ho impostato un punto di interruzione in un altro metodo, dal momento che si chiama, registrazione ScrollView mostra questo:

<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... > 

Inoltre, le dimensioni del contenuto come tale:

(width=320, height=416) 

a

(width=320, height=504) 

Entrambi i valori sembrano essere ritorna automaticamente ai valori che hanno quando la vista viene prima disposto. Ho impostato i breakpoint nel getter e setter della mia vista scroll e non riesco a trovare accessi inaspettati, quindi ho concluso che il cambiamento deve avvenire internamente. Questa è una conclusione giustificabile? Cosa potrebbe andare storto?

+0

Potresti avere le molle autoresizing regolate in altezza regolabile? – Jamie

+0

Dove lo troverei? – Jumhyn

+0

Ciò è dovuto al layout automatico. Spegnilo o modifica le dimensioni della vista di scorrimento regolando i vincoli piuttosto che impostando i fotogrammi. – rdelmar

risposta

6

Se si sta utilizzando l'autoapprendimento, è necessario modificare i vincoli e non impostare la cornice dello scrollview.

Vedere la risposta a una domanda simile here. Ha alcuni collegamenti ad esempi su come impostare i vincoli a livello di codice.

Inoltre, in quale metodo si imposta frame e contentSize? Poiché stai utilizzando uno storyboard, se è in viewDidLoad o viewWillAppear:, è preferibile spostare questo codice su viewDidLayoutSubviews.

+0

Ho effettivamente il codice in 'viewDidLayoutSubviews' (come da mia cronologia domande). Ci proverò più tardi oggi. – Jumhyn

+1

I vincoli sono la strada da percorrere. In realtà ho trovato che il modo migliore per farlo era aggiungere uno sbocco al vincolo in Interface Builder e quindi modificare la proprietà 'constant'. – Jumhyn

+0

@Jumhyn Sì, trovo anche che sia un modo semplice per cambiare un vincolo se già esiste in uno storyboard. Sono contento che tu abbia funzionato! –

Problemi correlati