2012-06-24 7 views
11

Vor kurzem habe ich heruntergeladen Xcode 4.5 (iOS 6), aber wenn versucht, eine meiner Projekte fortzusetzen i bemerkt, dass der UIScrollView nicht richtig funktioniert, lassen Sie mich deutlicher erklären:UIScrollView in iOS 6

I die initialisiert es mit dem folgenden Code habe die UIScrollView erstellt und fügte hinzu:

-(void)viewDidLoad{ 

    [mainScrollView setScrollEnabled:YES]; 
    mainScrollView.contentSize = CGSizeMake(480, 0); 

    [super viewDidLoad]; 

} 

nachdem ich meine XIB geöffnet und verknüpft die mainScrollView zu einem UIScrollView, nachdem ich einige UIButton die zum scrollView.When hinzugefügt gebaut ich das Projekt mainScrollView war Scrollen, aber die Tasten nicht aufgetaucht, ich meine, ich konnte nur den Knopf sehen, die bereits auf dem Bildschirm waren de. Was mache ich falsch? Wie kann ich das UIScrollView einrichten?

+0

Ich hatte gerade das gleiche Problem. Könnte das ein Fehler im iOS6 SDK sein? –

Antwort

4

Vielleicht haben Sie gerade falsch eingegeben, aber Ihre CGSize hat eine Höhe von 0?

+0

Nur um das vertikale Scrollen zu deaktivieren! – Mateus

+1

Kannst du es nicht einfach in IB deaktivieren? Oder einfach nur Eigenschaften verwenden? Das Einstellen der CGSize-Breite auf 0 klingt nach einer schlechten Idee. – DGund

+0

Wenn Sie das vertikale Scrollen deaktivieren möchten, legen Sie die Inhaltshöhe auf die Größe der Bildlaufansicht fest und deaktivieren Sie das vertikale Springen. –

3

Ich glaube, das ist ein Fehler mit entweder Xcode 4.5 oder dem iOS 6 SDK. Die Art und Weise, wie ich es behoben habe, war, die Unteransichten programmatisch zu meinem UIScrollView hinzuzufügen.

So würde man so etwas zu tun haben:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f); 
    [mainScrollView addSubView:button]; 
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height); 
} 

die Sie interessieren und lassen Sie mich wissen, ob dies für Sie gearbeitet.

Wenn Sie eine alte Version von Xcode haben, ist es möglicherweise eine gute Idee, den Code und die Spitze dort zu replizieren, um die Ergebnisse zu sehen.

39

Für xcode 4.5, Wenn Sie scrollView verwenden, müssen Sie entweder "use AutoLayout" im Dateiinspektor deaktivieren.

oder wenn Sie wollen „AutoLayout verwenden“, dann in .m (Implementierung) Datei hinzufügen, um dieses

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    theScroller.contentSize=CGSizeMake(1024.0,1300.0); 
} 
+1

Danke, danke, danke !! Ich knallte dafür mit dem Kopf eine Stunde lang gegen eine Mauer. Nochmals vielen Dank. – PaulJ

+2

OK, also die Antwort für AutoLayout findet sich hier: http://stackoverflow.com/questions/12619786/embed-imageview-in-scrollview-with-auto-layout-on-ios-6 im Grunde bewegen Sie die 'contentSize' Code für die 'viewDidAppear'-Methode. – PaulJ

+0

DANKE für diesen Beitrag !!!! Ich habe damit buchstäblich einen ganzen Tag verbrannt. Ich habe "AutoLayout" deaktiviert und schließlich funktioniert mein scrollView wie es sein soll. Verbrennt mich ... TY wieder – tg2007

4

Sie es mit Auto-Layout in XCode 4.5 tun können, aber Sie Config Ihre UIScrollView in viewDidAppear

Ich tue dies auch in einem statischen UITableView mit Bildern.

Benennen Sie Ihre Bilder wie timg1.png, timg2.png ....

in Ihrer ControllerView.h Datei

@property (weak, nonatomic) IBOutlet UIScrollView *Sv1; 
@property (weak, nonatomic) IBOutlet UIPageControl *Pc1; 

In Ihrer ControllerView.m Datei

-(void)viewDidAppear:(BOOL)animated 
{ 

    //Scrollview 
    Sv1.delegate = self; 

    Sv1.contentSize = CGSizeMake(260, 176); 

    [self.Sv1 setBackgroundColor:[UIColor clearColor]]; 
    // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170); 
    [Sv1 setCanCancelContentTouches:NO]; 

    Sv1.multipleTouchEnabled = NO; 
    Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    Sv1.clipsToBounds = YES; 
    Sv1.scrollEnabled = YES; 
    Sv1.pagingEnabled = YES; 

    NSUInteger nimagesTextil = 0; 
    CGFloat cxTextil = 0; 
    for (; ; nimagesTextil++) { 
     NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)]; 
     UIImage *imageTextil = [UIImage imageNamed:imageNameTextil]; 
     if (imageTextil == nil) { 
      break; 
     } 
     UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil]; 

     CGRect rect = imageViewTextil.frame; 
     rect.size.height = 176; 
     rect.size.width = 260; 
     rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width)/2) + cxTextil; 
     rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height)/2); 

     imageViewTextil.frame = rect; 

     [Sv1 addSubview:imageViewTextil]; 

     cxTextil += Sv1.frame.size.width; 
    } 
    self.Pc1.numberOfPages = nimagesTextil; 
    [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)]; 
    self.Pc1.currentPage = 0; 

} 
0

I würde es so machen:

-(void)viewDidLayoutSubviews 
{ 
[self.scrollview setScrollEnabled:YES]; 
[self.scrollview setUserInteractionEnabled:YES]; 
[self.scrollview setContentSize:CGSizeMake(320, _y)]; 
[self.scrollview setAlwaysBounceVertical:YES]; 
} 

Ich benutze die Klassenvariable _y, da ich alle Subviews-Höhen dazu addiert habe.