2014-10-02 20 views
8

So che ci sono un paio di domande in giro ma non riesco a capire come farlo (nessuna delle risposte mi ha aiutato), quindi ecco la mia versione della domanda.UIScrollView zoom con Autolayout

Ho un UICollectionView che è impostato per scorrere orizzontalmente. Ogni cella ha uno UIScrollView all'interno e all'interno dello UIScrollView Ho uno UIImageView.

Ora, le immagini visualizzate da UIImageView vengono caricate da Internet e non riesco a trovare un modo per fare in modo che lo zoom funzioni correttamente utilizzando gli storyboard e l'autolayout.

Se imposto vincoli che legano il mio UIScrollView al suo contenitore, tutto è ok. Nel momento in cui lego loallo UIScrollView XCode inizia a lamentarsi del fatto che la dimensione dello UIScrollView è ambigua.

Se non eseguo alcun vincolo in InterfaceBuilder, le immagini non sono visualizzate nella dimensione corretta (doh!).

Quindi, sono bloccato. Non so quali siano i vincoli da fare e quale visione debba essere legata a cosa. So che il mio risultato perfetto è un controller di visualizzazione che si comporta come l'app nativa per le foto di iOS. Cioè, l'immagine viene visualizzata grande quanto lo schermo (con una banda nera in alto e in basso o a sinistra, & a seconda dell'orientamento dell'immagine) e che è possibile ingrandirla e spostarla.

Aiuto per favore!

Nota

ho letto questi messaggi prima di inviare la mia domanda

risposta

2

Non è possibile legare nulla all'interno di una vista a scorrimento utilizzando Auto Layout. Non ha mai funzionato.

Le alternative sono ...

  1. non utilizzare layout automatico per l'interno della vista di scorrimento. Basta impaginare tutto con le cornici.
  2. Layout del contenuto della visualizzazione di scorrimento in un altro UIView utilizzando AutoLayout e quindi posizionarlo nella vista di scorrimento senza layout automatico.

In sostanza, non è possibile posizionare le sottoview dirette di una vista di scorrimento utilizzando Auto layout. Puoi posizionare la vista di scorrimento usando AL e puoi posizionare le sottoview delle sue sottoview ma c'è quel bit finale che non funziona.

Per questo caso, se è solo un'immagine, andrei a evitare del tutto. Soprattutto se stai facendo zoom e panning.

+0

Il fatto è che anche quando creo il mio 'UIImageView' in modo programmatico non riesco a farlo funzionare come dovrebbe. L'immagine viene visualizzata bene (centrata in 'UIScrollView'), ma quando eseguo lo zoom, si aggancia sempre all'angolo in alto a sinistra anziché al centro di' UIScrollView'. Quindi è strano Mi sto perdendo qualcosa? –

+0

Sì, ti manca qualcosa. Scatta in alto a sinistra perché non stai cambiando la sua origine solo la sua scala. È necessario aggiungere ulteriore logica per aggiornare anche l'offset del contenuto della vista di scorrimento. Puoi pubblicare il tuo codice di zoom. – Fogmeister

+0

Bene, non c'è molto codice "zoom". Prima di passare al layout automatico tutto quello che dovevo fare è restituire il mio contenuto "zommable" dal metodo 'viewForZoomingInScrollView (scrollView: UIScrollView) -> UIView?' E impostare un 'maximumZoomScale' maggiore di 0 e ** BOOM ** zoom, panoramica e tutti i lavori ... –

0

Funziona

Si può facilmente farlo. Beh, non molto facilmente, ho lottato per un bel po '! Sono riuscito a implementare il layout automatico all'interno dell'area scorrevole. Basta è solo verticale

  • Impostare dimensione intrinseca ad un "segnaposto" (per visualizzazione scorrevole)
  • Non impostare contentSize affatto
  • Fissare vincoli giusti per l'involucro (quindi sarà relativo alla vista primaria)

    self.view.addConstraint(NSLayoutConstraint(
        item:self.view, attribute:.Trailing, 
        relatedBy:.Equal, toItem:contentView, 
        attribute:.Trailing, multiplier:1, constant:0)) 
    scrollView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    

Quindi, nel tuo caso, il vostro lato destro contentView dovrebbe essere fissata sul lato destro dell'immagine

Provatelo, sicuramente avrete il vostro zoom lavorare

Ecco un esempio, può aiutare a https://github.com/nchanged/swift-content-manager/tree/master

1

Non so se ti aiuto con il tuo problema zoom ma Apple ha fornito una nota tecnica sull'uso delle visualizzazioni di scorrimento con layout automatico: Technical Note TN2154, UIScrollView And Autolayout

La parte importante con le visualizzazioni di scorrimento è che i vincoli delle sottoview all'interno della vista di scorrimento non sono legati alla vista di scorrimento stessa, ma alla pergamena il genitore della vista (nel tuo caso la cella della vista dell'insieme)

Problemi correlati