2010-06-15 12 views
6

Sto visualizzando una vista a scorrimento come la vista dettagliata della cella tableview. Ci sono più viste sulla vista dettagliata come etichette, pulsanti, ecc. Che sto creando attraverso il generatore di interfacce. Quello che sto creando tramite il generatore di interfacce è statico. Sto mettendo tutto su una vista di altezza 480.Calcola il contenuto di scrollview

Un'etichetta sulla mia vista dettagliata ha un testo dinamico che può estendersi a qualsiasi lunghezza. Il problema è che ho bisogno di impostare la dimensione del contenuto della scrollview per la quale ho bisogno della sua altezza.

Come impostare l'altezza della scrollview a condizione che il contenuto sia dinamico?

risposta

18

Si potrebbe provare a utilizzare ContentView di scrollview. Ha funzionato per me e ho avuto lo stesso problema con il controllo che utilizza il contenuto dinamico.

// Calculate scroll view size 
float sizeOfContent = 0; 
int i; 
for (i = 0; i < [myScrollView.subviews count]; i++) { 
    UIView *view =[myScrollView.subviews objectAtIndex:i]; 
    sizeOfContent += view.frame.size.height; 
} 

// Set content size for scroll view 
myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width, sizeOfContent); 

Faccio questo nel metodo denominato viewWillAppear nel controller per la vista che contiene la scrollview. È l'ultima cosa che faccio prima di chiamare viewDidLoad sul super.

Spero che risolva il tuo problema.

// hannes

+0

Grazie mille, Hannes .. sto pensando perché questo non mi colpisce .. – neha

+0

si rilascia il viste che scorrere, che li rimuove dal ScrollView. Impossibile incollare il codice correttamente nel commento, aggiunto come risposta. –

0

Immagino che non ci sia auto in caso di scrollview, e il contenuto dovrebbe essere calcolato per le viste statiche sullo schermo almeno e per la dinamica una volta che dovrebbe essere calcolato in movimento.

8

esempio corretto corta:

float hgt=0; for (UIView *view in scrollView1.subviews) hgt+=view.frame.size.height; 

[scrollView1 setContentSize:CGSizeMake(scrollView1.frame.size.width,hgt)]; 

noti che questo solo somme altezze, per esempio se ci sono due sottoview fianco a fianco, le loro altezze con entrambe vengono aggiunte, rendendo la somma più grande di quanto dovrebbe essere. Inoltre, se ci sono intervalli verticali tra le visualizzazioni secondarie, la somma sarà inferiore a quella che dovrebbe essere. altezza sbagliata confonde scrollRectToVisible, dando posizioni di scorrimento casuale :)

Questo ciclo è in funzione e collaudati:

float thisy,maxy=0;for (UIView *view in scrollView1.subviews) { 
    thisy=view.frame.origin.y+view.frame.size.height; maxy=(thisy>maxy) ? thisy : maxy; 
} 
+0

Grazie Henrik, questo e 'davvero utile! Poiché non posso accettare due risposte, inviterò le tue .. :) – neha

1

Un modo un po 'più facile per farlo è quello di nido il layout all'interno di una vista poi mettere quella vista all'interno della ScrollView. Supponendo che si utilizza i tag, questo funziona come segue:

UIScrollView *scrollview = (UIScrollView *)[self.view viewWithTag:1]; 
UIView *longView = (UIView *)[self.view viewWithTag:2]; 
scrollview.contentSize = CGSizeMake(scrollView.frame.size.width, longView.frame.size.height); 

In questo modo il Longview sa quanto alto è, e il contenuto del ScrollView è solo impostato per corrispondere.

1

Dipende dal tipo di contenuto che si intende aggiungere dinamicamente. Supponiamo di avere un grande testo da mostrare, quindi utilizzare UITextView e dato che si tratta di una sottoclasse di UIScrollView, è possibile ottenere setContentSize di TextView quando si assegna il contenuto del testo. In base a ciò è possibile impostare la dimensione totale di UIScrollView.

float yPoint = 0.0f; 
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 320.0f, 400.0f)]; 

UITextView *calculatorTextView = [[UITextView alloc] init]; calculatorTextView.text = @"My looong content text ..... this has a dynamic content"; ` 


[calculatorTextView sizeToFit]; 


yPoint = yPoint + calculatorTextView.contentSize.height; // Bingo, we have the new yPoint now to start the next component. 

// Ora si conosce l'altezza del testo e dove si concluderà. Quindi puoi creare un'etichetta o un'altra TextView e visualizzare il tuo testo lì. È possibile aggiungere tali componenti come sottoview alla scrollview.

UITextView *myDisplayContent = [[UITextView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 300.f, calculatorTextView.contentSize.height)]; 

myDisplayContent.text = @"My lengthy text ...."; 
[myScrollView addSubview:myDisplayContent]; 

// Al termine, impostare la dimensione contenuto del 'myScrollView' alla lunghezza totale dell'area di visualizzazione.

[myScrollView setContentSize:yPoint + heightOfLastComponent]; 

Questo funziona per me.

0
scrollView.contentSize = [scrollView sizeThatFits:scrollView.frame.size] 

credo sarebbe anche lavorare

Problemi correlati