2013-10-04 17 views
16

L'obiettivo principale è quello di poter scorrere i contenuti di ogni riga orizzontalmente.Orizzontale UIScrollView all'interno personalizzato UITableViewCell - utilizzando IB Storyboard - Non scorrendo

Sto provando a farlo con X Code 5 e utilizzando StoryBoard.

Il problema sembra essere semplice, ma dopo molte ore di ricerca non ho ottenuto nulla tranne un problema che è in qualche modo simile ma usando l'approccio solo programmatico see here.

In IB, ho la struttura come mostrato nel disegno seguente. View structure

  • La dimensione contenuto del ScrollView nel set di {5000, 500} impostare sia in IB e nel codice
  • Il telaio ScrollView è {0,0} {} 320,44
  • Il cornice di etichette è impostata su {20,0} {500,44}

Ho anche fornito un example project in a github repository. L'esempio include anche una scrollview "normale" che funziona al di fuori di uitableviewcell.

Si prega di dire che ho trascurato qualcosa di molto semplice.

+0

È iOS6 o 7? –

+0

È in ios 7. –

+0

Hai trovato la soluzione? Ho una situazione simile. La mia scrollview funziona perfettamente all'interno di UIViewController, ma quando inserisco un UITableViewCell semplice non funziona. Io lavoro con Xcode 5 e iOS 7. – Beto

risposta

6

L'autolayout è attivato (ed è una buona cosa) nello storyboard. La dimensione scorrevole di un UIScrollView viene calcolata in base ai vincoli delle sue sottoview.

Quindi è necessario aggiungere "top, bottom, leading, trailing space to superview" su UIImageView all'interno di UIScrollView. Possono essere tutti impostati su 0.

Ora se non si aggiunge alcun vincolo a UIImageView, verrà utilizzata la sua dimensione intrinsicContentSize.

I suoi vincoli dovrebbe essere simile a questo:

autolayout constraints

Si noti che è Mancavano anche i vincoli sulla vista contenuto del tuo cellulare.

Quando hai finito con i vincoli, rimuovi tutti setContentSize: chiamate dal tuo codice.

+0

Questo ha funzionato per me, ma poiché sto usando un UIView nella mia vista scroll invece di una Image View, ho dovuto impostare anche i limiti di altezza e larghezza sul mio UIView affinché questo funzionasse. – dmzza

0

non posso accedere al tuo Storyboard, con la mia xCode 4.

Prima di tutto, è necessario collegare la UITableView con il ViewController. Lo UITableViewCell si trova all'interno di UITableView. Ecco perché dovresti provare a cambiare le impostazioni del tuo UITableView. Dopo il collegamento, si dovrebbe cercare di cambiare il contentinset del vostro UITableView come questo:

[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)]; 

Se questo non funziona, si potrebbe anche provare a cambiare la dimensione contenuto del tuo TableView. Forse devi anche cambiare la dimensione del tuo UIView prima che funzioni.

+0

Non ho proprio la risposta. Sembra che tu stia parlando del caso in cui o inserisci una vista tabella all'interno di una vista di scorrimento, che non è il caso che sto chiedendo. –

+0

quindi installare xcode 5 – Alexis

1

Con la sua nuova modalità di passaggio automatico, iOS 7 sembra aver rotto molte app iOS 6 e precedenti che utilizzano UIScrollView. Ho postato una domanda simile recente [ora messo in attesa dai moderatori - così si potrebbe non essere in grado di vederlo] dove l'utente Lv.BeLeCk trovato il successo con:

self.automaticallyAdjustsScrollViewInsets = NO; 

nel controller della vista che tiene lo ScrollView . Basta metterlo dopo l'istanza della visualizzazione di scorrimento. Vedi se funziona, e se lo fa, per favore invertire il suo contributo.

Penso che la causa principale sia che, al momento dell'istanziazione, UIScrollViews sta aggiornando le proprie dimensioni in base al loro contenuto corrente, a differenza di prima, dove hanno lasciato loro solo l'Inferno.

Perché la Apple voleva mettersi a letto con quello non lo so. Sto ancora aspettando l'allineamento superiore e inferiore per le etichette multilinea!

+1

Non sembra funzionare. Mi chiedo se è necessario che lo scrollview sia all'interno di uitablecellview –

1

Verificare che setContentSize sia chiamato in viewDidLayoutSubviews e in scrollViewDidEndZooming:withView:atScale:. In iOS6, se non avessi il codice in questi metodi, il comportamento predefinito funzionava a dovere, in iOS7 con il nuovo sistema di layout, sono richiesto. Può essere chiamato più di una volta per una configurazione, basta continuare a chiamare setContentSize.

+0

Thanks Yimin. In realtà, le funzionalità delle app sono cambiate, quindi non avrò bisogno di questo ora. Tuttavia, tenterò il tuo suggerimento sul codice Github per vedere come va. Tornerò qui speranzosamente con risultati a breve. –

+0

@Yimin puoi collegare la documentazione indicando che i metodi sopra menzionati devono essere inseriti in 'viewDidLayoutSubviews'? – RaffAl

+0

@reecon - Sono giunto alla conclusione dopo aver esaminato numerosi commenti su SO. per esempio. http: // StackOverflow.com/domande/13439304/UIScrollView-setcontentsize-break-vista-con-la configurazione automatica. Al momento della stesura, questo era il caso, forse è diverso ora. –

2

Ho avuto lo stesso problema, e ha scoperto che la rimozione di vista il contenuto del ScrollView e l'aggiunta di nuovo funziona:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.label removeFromSuperview]; 
    [self.scrollView addSubview:self.label]; 
    self.scrollView.contentSize = self.label.frame.size; 
} 

Non è la soluzione più elegante, ma funziona per me.

0

Ho risolto la situazione tramite IB.

Devo avere lo stesso valore all'interno di "Sezione valore identità - Attributi runtime definiti dall'utente" con chiave "frame - Rect - CGRectValue" uguale a "Dimensione ispettore - Visualizza valori".

Spero che questo ti aiuti.

0

Ho lo stesso problema oggi. Dopo qualche ora continua a trovarlo, viene risolto cambiando la selezione della cella su Predefinito da Nessuno. Spero che possa aiutare gli altri.

8

Un'altra alternativa per questo è utilizzare UICollectionView all'interno di un UITableViewCell personalizzato

+1

sì. seguire il tutorial potrebbe aiutare. https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/ –

Problemi correlati