ScrollView funktioniert nicht richtig

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ScrollView funktioniert nicht richtig

    Hi,
    ich habe eine ScrollView und darin einen SubView nur leider wird mir der SubView nicht richtig angezeigt Beim Start ist dann immer oben eine weiße Fläche (siehe Bild 1) und ich kann rauch auch scrollen aber dann ist unten so ne weiße Fläche (siehe Bild 2). Content Size stimmt, Content Offset ist Bei P(0,0), der Subview ist exakt so groß wie der ScrollView. Also es stimmt eigentlich alles. Woran liegt das dann? Was mache ich falsch? AutoLayout ist an aber ich habe die Constraints nach Vorgaben von Apple gesetzt und das Problem trat auch schon ohne AutoLayout auf, nur nicht so stark.

    Viele Grüße
    Nils
  • Sorry :D Zum ScrollView anlegen gibt es aber nicht viel zu sagen. Einfach im Storyboard auf den View gezogen, Subview rein, alles mit Outlets verbunden. ScrollView Constraints definiert und das war's. Im Code setzte ich dann nur hier die ContentSize:

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. ....
    5. graphScrollView.contentSize = CGSizeMake(graphView.frame.size.width, graphView.frame.size.height);
    6. ....
    7. }


    Die Constraints sehen wie auf den Bild zu erkennen ist aus.
  • @macmoonshine

    Wenn ich den GraphView eine Hintergrundfarbe gebe sieht es so aus. Das Problem tritt sowohl auf einen 3.5" sowie 4" Screen auf. Das raffe ich alles nicht so ganz! Ich werde mich mit ScrollVIews nie anfreunden!

    @Manfred Kreß

    Der Frame stimmt in der drawLayer Methode. Danke, ich probiere mal, ob ich damit was ändern kann.
  • Sorry, dass ich erst jetzt antworte aber die Tage kam was dazwischen..

    @Manfred
    Habe ich probiert ohne Erfolg. Der ScrollView geht ja bis Oben hin nur der ConentenView ist irgendwie zu weit unten und hat oben und unten eine weiße Fläche. Ich verstehe das selber nicht

    @ioscampus
    Ich habe das jetzt mal versuchshalber in viewDidAppear gesetzt aber leider selber Effekt.
  • So, ich habe jetzt nach langen Versuchen endlich hinbekommen, dass der ScrollView im Portrait Modus richtig funktioniert. Dies mache ich im ViedDidLoad so:

    Quellcode

    1. [self.view removeConstraints:self.view.constraints];
    2. [self.graphView removeConstraints:self.graphView.constraints];
    3. graphScrollView.translatesAutoresizingMaskIntoConstraints = NO;
    4. graphView.translatesAutoresizingMaskIntoConstraints = NO;
    5. NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(graphScrollView,graphView);
    6. [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[graphScrollView]|" options:0 metrics:0 views:viewsDictionary]];
    7. [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[graphScrollView]|" options:0 metrics:0 views:viewsDictionary]];
    8. [graphScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[graphView]|" options:0 metrics:0 views:viewsDictionary]];
    9. [graphScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[graphView]|" options:0 metrics:0 views:viewsDictionary]];
    Alles anzeigen

    Hierbei habe ich mich am Apple Beispiel orientiert. Nur wie mache ich das es jetzt im Portrait Modus aus funktioniert? Mit folgenden Code wird zwar der Graph an die Größe angepasst, aber wenn ich zoome und nur scrolle kehrt der Graph sofort in seine Portrait-Größe zurück und behält nicht die Größe (siehe Bild). Was muss ich anders machen? Der GraphScrollView wird automatisch an die Größe angepasst:

    Quellcode

    1. -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    2. self.graphScrollView.contentSize = self.view.bounds.size;
    3. self.graphView.frame = self.graphScrollView.bounds;
    4. [self.view setNeedsUpdateConstraints];
    5. [self.graphScrollView setNeedsUpdateConstraints];
    6. [self.graphView setNeedsUpdateConstraints];
    7. [self.graphView setNeedsUpdateConstraints];
    8. [self.graphScrollView setNeedsUpdateConstraints];
    9. [self.view setNeedsUpdateConstraints];
    10. }
    Alles anzeigen
  • Layout-Constraints sind dafür da, dass Du nicht den Frame der Views manuell anpassen musst. Die Werte des Frames entstehen durch den Autolayout-Prozess und nicht umgekehrt. So wie Du Dein Layout implementiert hast, solltest Du eher Autosizing verwenden, obwohl es selbst da noch zu kompliziert ist.

    Wenn Du es dennoch über Autolayout machen willst: In Xcode 5 kannst Du die Constraints fast analog zur Autosizing-Mask setzen, wenn Du die Buttons auf der Zeichenfläche verwendest.
    „Meine Komplikation hatte eine Komplikation.“
  • Mit Autosizing funktioniert es ja so (Bild 1). Es ist aber blöd,nur diesen Screen in einen extra Xip Date zu haben, statt alles im Storyboard. Deswegen versuche ich das mit Autolayout zu lösen. Eigentlich ist die Autosizing Mask von den beiden Views (ScrollView und GraphView) relativ simpel. Aber ich bekomme das einfach nicht per Autolayout hin. Geht folgenden Autsoizing Mask überhaupt mit Auto-Layout? Wenn ja wie? Ich probiere schon seit Stunden, bekomme es aber einfach nicht hin. (Bei Graph-, ScrollView gleich)
  • Und wie? Dass mit den an Rand pinnen funktioniert ja mit AutoLayout auch nicht so. Beim ScrollView bekomme ich das hin, aber wenn ich den GraphView an Leading, Trailing, Top und Bottom Space pinne dann funktioniert das zoomen nicht mehr, da der View nicht mehr breiter wird, sondern er bleibt dann auf der selben Größe und die Achsen werden so immer kleiner. Es kann doch nichts schwer sein! Ich habe echt Null Plan, wie ich das umsetzten kann. In Xcode 5 habe ich zwar die ganzen Möglichkeiten aber das funktioniert alles wie gesagt nicht so bzw. ich bin zu blöd dazu. Kann man sich da irgendwo belesen oder könntest du ein kleines Beispiel-Projekt machen? Was zum Lesen würde mir aber auch schon weiterhelfen. Ich komme einfach nicht weiter!! :(
  • Ich habe mich leider zu früh gefreut :( So funktioniert jetzt zwar Scrollen wie eine eins aber zoomen gar nicht. Wenn ich zoomen will werden zwar die ganzen Methoden aufgerufen aber der View vergrößert sich nicht. Ich habe es auch schon versucht,den View in einen ContentView zu setzten, diesen mit Constraints auszustatten und den eigentlichen View nicht. Aber alles ohne Erfolg. Was mache ich falsch? Warum vergrößert sich der View nicht, wenn ich zoome?