J'ai une application qui, dans xcode 4.5 et ios 6.1, fonctionnait parfaitement bien lors du défilement . Cependant, après avoir téléchargé xcode 5 et iOS 7, mes vues de défilement ne fonctionnent plus.
Voici mon fichier .h:
#import <UIKit/UIKit.h>
@interface GrillretterViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIScrollView *grillretterScroller;
@property (assign) CGPoint rememberContentOffset;
@end
Et voici mon fichier .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
VEUILLEZ aider! Je suis coincé!
Meilleures salutations!
J'ai résolu ce problème en désélectionnant 'Utiliser autolayout' dans la sous-fenêtre Inspecteur de fichier de la vue principale de la vue Défilement.
Si vous souhaitez que l'option 'Autolayout' soit activée, essayez 'Editeur -> Reslove Autolayout Issues -> Ajouter des contraintes manquantes'. La contrainte clé semble être "L'espace en bas à: Superview et dans mon cas était -300, donnant 300 espace de défilement sur le bas de la vue.
Comme mentionné par l'utilisateur2394787:
Sélectionnez votre contrôleur de vue qui a le scrollview puis allez à
Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].
Cela le fera fonctionner.
J'ai essayé de voter la réponse ci-dessus, mais n'ai pas assez de représentant.
Je viens de le résoudre en allant dans Editeur> Résoudre les problèmes de mise en forme automatique> Ajouter des contraintes manquantes dans View Controller.
J'espère que cela t'aides.
Je viens de définir "Espace vertical" à la valeur constante automatique. Peut-être que cela aide dans certains cas.
et le définir dans l'inspecteur d'attributs
J'espère que ça aide. THX.
- (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));
}
Je ne sais pas si ça va marcher
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
Lorsque AutoLayout est activé, assurez-vous que l'espacement vertical (@ "V: | - [sous-vue] - |") est appliqué entre UIScrollView et sa sous-vue. Si votre scrollView est destiné au défilement horizontal, appliquez un espacement horizontal (@ "H: | - [sous-vue] - |").
Je n'avais pas de hauteur fixe, donc je définissais la taille du contenu de scrollview dans le code en fonction de mon libellé à l'intérieur
CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
J'ai eu le même problème après avoir développé une application pour iOS8, puis testé sur iOS7 par la suite . Bien que j'aie essayé de définir certaines options de la vue de défilement, telles que:
[self.scrollView setScrollEnabled:YES];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)];
[self.scrollView setContentOffset:CGPointZero];
La solution qui a fonctionné pour moi a consisté à entrer dans le fichier de scénario, et à vous assurer que vous avez défini des contraintes pour toutes les vues de la vue de défilement. La taille du contenu de la vue de défilement est calculée en fonction des contraintes de chaque sous-vue de la vue de défilement. Par conséquent, dans mon cas, j'avais UIView et UITableView. Après avoir défini les contraintes pour UIView (début, début, fin, hauteur) et UITableView (espacement vertical par rapport à UIView, début, fin, bas), la vue de défilement calculait la taille du contenu et commençait à fonctionner.
Si désactiver la mise en page automatique fonctionne, ce n'est pas une solution idéale pour tout le monde. Il suffit de jouer avec Storyboard et de définir des contraintes pour toutes les sous-vues dans la vue de défilement, de manière à définir une ligne verticale de contraintes, du haut au bas de la vue de défilement.