web-dev-qa-db-fra.com

UIScrollView ne défile pas après la mise à niveau vers iOS7/xcode 5

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!

19
Tobias Lindgreen

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.

enter image description hereenter image description here

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.

49
Jim Holland

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.

28
Jasen Su

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. 

8
diogo.appDev

Je viens de définir "Espace vertical" à la valeur constante automatique. Peut-être que cela aide dans certains cas.

Click the "Vertical Space"

et le définir dans l'inspecteur d'attributs

tick that Standard

J'espère que ça aide. THX.

6
Pokotuz
- (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));
}
2
pkc456

Je ne sais pas si ça va marcher

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
2
Camo

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] - |").

0
MkVal

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];
0
Priebe

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.

0
Andy Shephard