it-swarm.com.de

UIScrollView scrollt nach dem Upgrade auf iOS7/xcode 5 nicht

Ich habe eine App, die in xcode 4.5 und ios 6.1 beim Scrollen einwandfrei funktioniert hat. Nach dem Herunterladen von xcode 5 und iOS 7 funktionieren meine Scroll-Ansichten jedoch nicht mehr.

Hier ist meine .h-Datei:

#import <UIKit/UIKit.h>

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

@end

Und hier ist meine .m-Datei:

#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

BITTE helfen! Ich stecke fest!

Freundliche Grüße!

19

Ich habe dieses Problem gelöst, indem Sie in der Hauptansicht in der Bildlaufansicht die Option "Autolayout verwenden" deaktiviert haben.

enter image description hereenter image description here

Wenn Sie 'Autolayout' aktiviert lassen möchten, versuchen Sie 'Editor -> Probleme mit Autolayout erneut entfernen -> Fehlende Einschränkungen hinzufügen'. Die wichtigste Einschränkung scheint "Bottom Space to: Superview" zu sein und in meinem Fall war -300, was 300 Scroll-Speicherplatz am unteren Rand der Ansicht ergibt.

49
Jim Holland

Wie von user2394787 erwähnt:

Wählen Sie Ihren View Controller aus, der über die Bildlaufansicht verfügt, und gehen Sie zu

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

Damit wird es funktionieren. 

Ich habe versucht, die obige Antwort abzustimmen, habe aber nicht genügend Vertreter.

28
Jasen Su

Ich habe es gerade gelöst, indem Sie auf Editor> Probleme mit der AutoLayout-Lösung> Fehlende Einschränkungen in View Controller hinzufügen klicken

Hoffe das hilft. 

8
diogo.appDev

Ich habe gerade "Vertical Space" auf den automatischen konstanten Wert gesetzt. Vielleicht hilft es in manchen Fällen.

Click the "Vertical Space"

und legen Sie es im Attributinspektor fest

tick that Standard

Ich hoffe es hilft. Vielen Dank.

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

Ich bin nicht sicher, ob das funktionieren wird

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

Stellen Sie bei aktiviertem AutoLayout sicher, dass der vertikale Abstand (@ "V: | - [Unteransicht] - |") zwischen UIScrollView und seiner Unteransicht angewendet wird. Wenn Ihre Bildlaufansicht für den horizontalen Bildlauf vorgesehen ist, wenden Sie den horizontalen Abstand an (@ "H: | - [Unteransicht] - |").

0
MkVal

Ich hatte keine feste Höhe, daher habe ich die Inhaltsgröße der Bildlaufansicht entsprechend meinem Etikett in der Bildlaufansicht im Code festgelegt

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

Ich hatte das gleiche Problem, nachdem ich eine App für iOS8 entwickelt hatte und dann anschließend auf iOS7 getestet habe. Obwohl ich versucht hatte, bestimmte Optionen in der Bildlaufansicht einzustellen, z.

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

Die Lösung, die für mich funktionierte, bestand darin, in die Storyboard-Datei zu gehen und sicherzustellen, dass Einschränkungen für alle Ansichten in der Bildlaufansicht festgelegt sind. Die Inhaltsgröße der Bildlaufansicht wird anhand der Einschränkungen jeder Unteransicht innerhalb der Bildlaufansicht berechnet. In meinem Fall hatte ich eine UIView und eine UITableView. Nach dem Festlegen von Einschränkungen für UIView (oben, führend, nachlaufend, Höhe) und UITableView (vertikaler Abstand zu UIView, führend, nachlaufend, unten) berechnete die Bildlaufansicht die Inhaltsgröße und funktionierte.

Das Deaktivieren des automatischen Layouts funktioniert zwar, ist jedoch nicht die ideale Lösung für alle. Spielen Sie einfach mit dem Storyboard und legen Sie Einschränkungen für alle Unteransichten in der Bildlaufansicht fest, sodass eine vertikale Linie von Nebenbedingungen von oben in der Bildlaufansicht nach unten festgelegt wird.

0
Andy Shephard