UIScrollView non scorre dopo l’aggiornamento a iOS7 / xcode 5

Ho un’applicazione che in xcode 4.5 e iOS 6.1 ha funzionato perfettamente bene durante lo scorrimento. Tuttavia, dopo aver scaricato xcode 5 e iOS 7 le mie visualizzazioni a scorrimento non funzionano più. ???

Ecco il mio file .h:

#import  @interface GrillretterViewController : UIViewController @property (strong, nonatomic) IBOutlet UIScrollView *grillretterScroller; @property (assign) CGPoint rememberContentOffset; @end 

Ed ecco il mio file .m:

 #import "GrillretterViewController.h" @interface GrillretterViewController () @end @implementation GrillretterViewController @synthesize grillretterScroller, rememberContentOffset; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; [grillretterScroller setScrollEnabled:YES]; // Do any additional setup after loading the view. } - (void) viewDidAppear:(BOOL)animated { [grillretterScroller setContentSize:CGSizeMake(300, 915)]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; self.grillretterScroller.contentOffset = CGPointMake(0, 0); } - (void)viewWillDisappear:(BOOL)animated { self.rememberContentOffset = self.grillretterScroller.contentOffset; [super viewWillDisappear:animated]; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.grillretterScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

Per favore aiuto! Sono bloccato!

I migliori saluti!

Ho risolto questo problema deselezionando ‘Usa Autolayout’ nel pannello Impostazioni File della vista principale all’interno della Vista di Scorrimento.

inserisci la descrizione dell'immagine quiinserisci la descrizione dell'immagine qui

Se vuoi mantenere attivo ‘Autolayout’, prova ‘Editor -> Risolvi problemi di Autolayout -> Aggiungi vincoli mancanti’. Il vincolo chiave sembra essere “Spazio in basso a: Superview e nel mio caso era -300, dando 300 spazio di scorrimento sul fondo della vista.

Come menzionato dall’utente2394787:

Seleziona il tuo controller di visualizzazione che ha lo scrollview, quindi vai a

 Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller]. 

Questo lo farà funzionare.

Ho provato a votare la risposta di cui sopra ma non ho abbastanza rep.

L’ho appena risolto andando in Editor> Risolvi problemi di AutoLayout> Aggiungi vincoli mancanti in View Controller

Spero che questo ti aiuti.

Ho appena impostato “Spazio verticale” sul valore della costante automatica. Potrebbe essere d’aiuto in alcuni casi.

Clicca lo

e impostalo in Impostazioni attributi

segna questo standard

Spero che aiuti. Grazie.

Non sono sicuro che funzionerà

 - (void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)]; } 
 - (void)viewDidLayoutSubviews { [self performSelector:@selector(updateContentSize) withObject:nil afterDelay:0.25]; } -(void)updateContentSize{ UIView *viewLast = [viewContent viewWithTag:100]; scrollViewAd.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, CGRectGetMaxY(viewLast.frame)); } 

Non avevo un’altezza fissa, quindi ho impostato il contenuto della scrollview in codice in base alla mia etichetta all’interno della scrollview

 CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height); [self.scrollView setContentSize:scrollViewContentSize]; 

Con AutoLayout abilitato, assicurarsi che la spaziatura verticale (@ “V: | – [subview] – |”) sia applicata tra UIScrollView e la sua sottoview. Se la tua scrollView è per lo scorrimento orizzontale, applica la spaziatura orizzontale (@ “H: | – [subview] – |”).

Ho avuto lo stesso problema dopo lo sviluppo di un’app per iOS8, quindi di test su iOS7 in seguito. Sebbene avessi provato a impostare determinate opzioni sulla vista di scorrimento come:

 [self.scrollView setScrollEnabled:YES]; [self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)]; [self.scrollView setContentOffset:CGPointZero]; 

La soluzione che ha funzionato per me era quella di andare nel file storyboard e assicurarsi di avere i vincoli impostati per tutte le viste all’interno della visualizzazione di scorrimento. La dimensione del contenuto della vista di scorrimento viene calcasting in base ai vincoli di ciascuna sottoview all’interno della vista di scorrimento, quindi nel mio caso, ho avuto un UIView e UITableView. Dopo aver impostato i vincoli per UIView (superiore, iniziale, finale, altezza) e UITableView (spaziatura verticale su UIView, iniziale, finale, inferiore), la vista di scorrimento ha calcolato la dimensione del contenuto e ha iniziato a funzionare.

Mentre si distriggers il layout automatico, non è una soluzione ideale per tutti. Basta giocare con Storyboard e impostare i vincoli per tutte le sottoview nella vista di scorrimento, in modo che sia impostata una linea verticale di vincoli, dalla parte superiore della vista di scorrimento alla parte inferiore.