Landscape und Portrait mode Frame-width anpassen

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

  • Landscape und Portrait mode Frame-width anpassen

    Hallo,

    ich versuche die möglichkeit zu geben zwischen Landscape und Portrait zu wechseln.
    Ich habe ein Scrollview mit 2 Textfelder und 1 Button.
    Bin ich in dieser detailansicht habe ich Portrait nun das Frame hat dann 260 px(funktioniert noch).
    Nun drehe ich in den Landscape mode, dass Frame hat nun immer noch 260 px, er ist aber im Landscape mode.
    Wenn ich jetzt auf zurück klicke und wieder in die Detailansicht ist der Frame 400px, so wie es sein soll.
    Was muss ich da noch beachten?

    Hier mal der Code:

    Quellcode

    1. - (void)viewWillAppear:(BOOL)animated {
    2. [super viewWillAppear:animated];
    3. CGRect frame = titleLabel.frame;
    4. frame.size.width = 260;
    5. if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)){
    6. frame.size.width = 400;
    7. } else if((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown)){
    8. frame.size.width = 260;
    9. }
    10. titleLabel.frame = frame;
    11. frame = titleLabel.frame;
    12. frame.size.height = titleLabel.contentSize.height;
    13. titleLabel.frame = frame;
    14. frame = textLabel.frame;
    15. frame.size.width = 260;
    16. if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)){
    17. frame.size.width = 400;
    18. } else if((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown)){
    19. frame.size.width = 260;
    20. }
    21. textLabel.frame = frame;
    22. frame = textLabel.frame;
    23. frame.size.height = textLabel.contentSize.height;
    24. frame.origin.y = titleLabel.frame.origin.y + titleLabel.frame.size.height + 5;
    25. textLabel.frame = frame;
    26. //Button soll nun unter textLabel
    27. CGRect buttonFrame = linkButton.frame;
    28. buttonFrame.origin.y = textLabel.frame.origin.y + textLabel.frame.size.height;
    29. linkButton.frame = buttonFrame;
    30. scrollView.contentSize = CGSizeMake(320, buttonFrame.origin.y + buttonFrame.size.height);
    31. }
    Alles anzeigen
  • mylama schrieb:

    Was muss ich da noch beachten?

    Du solltest die Orientierung nicht in viewWillAppear: abfragen und die Größen danach setzen. Erstens hat der ViewController zu diesem Zeitpunkt noch nicht unbedingt die richtige Orientierung. Zweitens wird diese Methode nur vor der Anzeige des Views und nicht nach einer Rotation aufgerufen. Drittens musst Du dann den Kram mehrfach machen und viertens ist das unelegant.

    Die Viewgröße kannst Du über die AutoresizingMask automatisch anpassen lassen: developer.apple.com/library/io…p/UIView/autoresizingMask
    „Meine Komplikation hatte eine Komplikation.“
  • So habe mich mal durchgearbeitet, leider funktioniert es jetzt nurnoch bei der breite.
    In der höhe funktioniert es garnicht.

    Wechsel ich in den Landscape ist die Höhe so klein das ich die überschrift nicht lesen kann.

    UIViewAutoresizingFlexibleHeight macht im Landscape auch mein Button viel höher.

    Quellcode

    1. titleLabel.textColor = [UIColor blackColor];
    2. titleLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:12.0];
    3. textLabel.textColor = [UIColor darkGrayColor];
    4. textLabel.font = [UIFont fontWithName:@"Verdana" size:12.0];
    5. scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    6. titleLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    7. textLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    8. linkButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    9. titleLabel.text = [item objectForKey:@"title"];
    10. textLabel.text = [item objectForKey:@"text"];
    Alles anzeigen
  • oh man, was habe ich da rein kopiert ?( ?
    Ich habe nur das UIViewAutoresizingFlexibleWidth drin nicht das UIViewAutoresizingFlexibleLeftMargin.
    Dies war nur in der apple doku drin und wollte getest werden.

    Also die Labels sollten sich schon automatisch an die Höhe anpasst, der button war natürlich Quark ;) .
    Sorry für die blöde frage, aber wofür brauche ich dann UIViewAutoresizingFlexibleHeight, wenn ich es nicht wirklich bei Labels verwenden kann ?
  • mylama schrieb:

    Sorry für die blöde frage, aber wofür brauche ich dann UIViewAutoresizingFlexibleHeight, wenn ich es nicht wirklich bei Labels verwenden kann ?

    In der Regel um flächige Views (Bilder, Scrollviews usw.) anzupassen. Vielleicht solltest Du Dich von außen nach innen voran tasten. Bei Buttons und Labels setzt Du meistens starre Ränder.
    „Meine Komplikation hatte eine Komplikation.“