Domanda

Sto sottoclassi UIScrollView e sulla partenza ho riempire questo ShowsScrollView con alcuni elementi. Dopo il riempimento, ho telaio setup e contentSize a questo ShowsScrollView. Tutto funziona bene per ora, ottengo tocchi eventi, lo scorrimento sta lavorando ..

Ma dopo la rotazione di paesaggio, cambio coordinate xey di ShowsScrollView telaio, per spostarlo dal basso all'alto destra. Poi a ridimensionare esso (la larghezza e l'altezza del cambiamento ShowsScrollView telaio) e riordinare gli elementi in questo rotolo. Alla fine ho messa a punto nuova contentSize. Ora ottengo evento tocchi solo sulla prima 1/4 del ScrollView, lo scorrimento anche lavorare solo su 1/4 della ScrollView, ma scorrere tutti gli elementi ScrollView. Dopo tutte le azioni che scrivo un registro: NSLog (@ "ViewController: setLandscape finito: formato:% f, f% tenore:% f,% f", scrollView.frame.size.width, scrollView.frame.size.height, ScrollView .contentSize.width, scrollView.contentSize.height);

I valori sono corretti: ViewController: setLandscape finito: dimensione: 390,000 mila, 723,000 mila contenuti: 390.000000,950.000000

Il ritratto di nuovo a rotazione, mi muovo e ridimensionare tutto indietro cosa e tutto funziona bene ..

Si prega di aiuto!

È stato utile?

Soluzione

Ho avuto lo stesso problema e sono riuscito a farlo funzionare impostando le dimensioni del self.view di nuovo dopo aver cambiato il telaio del ScrollView. Non so perché questo funziona, ma lo fa.

// Set the view's frame
if (UIDeviceOrientationIsLandscape(toOrientation)) {
 [self.view setSize:CGSizeMake(1024, 724)];
} else {
 [self.view setSize:CGSizeMake(768, 960)];
}

// Set scrollview frame
if (UIInterfaceOrientationIsLandscape(toOrientation)) {
 self.scrollView.frame = CGRectMake(0, 0, 100, 300);
 self.scrollView.contentSize = CGSizeMake(100, 600);
}
else {
 self.scrollView.frame = CGRectMake(0, 0, 300, 100);
 self.scrollView.contentSize = CGSizeMake(600, 100);
}

// Move your content around here

// Set the view's frame again
if (UIDeviceOrientationIsLandscape(toOrientation)) {
 [self.view setSize:CGSizeMake(1024, 724)];
} else {
 [self.view setSize:CGSizeMake(768, 960)];
}

Altri suggerimenti

Dovete portare scrollView alla parte anteriore della superView, ad esempio:

[self.view bringSubviewToFron:scrollView];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top