Views zur Laufzeit verschieben und vergrößern

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

  • Views zur Laufzeit verschieben und vergrößern

    Ich habe einen Dialog mit verschiedenen Elementen, die nicht immer alle aktiv sind.

    Das Layout ist von oben nach unten folgerndermaßen angeordnet:
    1. UIScrollview für horizontal verschiebbare Labels
    2. UIView mit einem UILabel drin
    3a. UIScrollView oder
    3b. UITableView
    4. UIScrollView für Buttons

    Jede View nimmt dann ein paar Objekte auf (Labels, Edittext usw.)

    Die erste Scrollview kann über die Settings auch deaktiviert werden und soll dann nicht mehr sichtbar sein.
    Ich dachte, ich mache im ViewDidLoad folgende Aktionen:
    - Scrollview1 hidden auf YES setzen
    - UIView2 mit [view2 setFrame:CGRectMake(view2.frame.origin.x, view2.origin.y - scrollview1.frame.size.height, maxBreite, view2.frame.size.height)] nach oben schieben.

    Dachte ich ... ;(

    Die ScrollView1 belegt weiterhin den Platz (trotz hidden = YES).
    Ich habe dann mit CGMakeRect(0,0,0,0) die ScrollView1 ganz klein gemacht, aber sehe keinen Unterschied.

    Ist mein Ansatz so falsch oder übersehe ich was ganz anderes ?

    Die grundsätzliche Vorgehensweise muss zur Laufzeit erfolgen, denn auch die beiden Objekte unter 2 müssen je nach erfassten Daten alternativ angezeigt werden können und dann jeweils das andere Objekt in der ganzen Fläche überlagern.
  • Hey,

    schau dir mal die Punkte in der Doku unter "Managing the View Hierarchy" an.

    Solls detailierter sein, bitte ich um einen Screenshot oder ähnliches.

    VG
    PT
    „When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.“
    – James Whitcomb Riley
  • @PascalTurbo:

    @Inos:
    Danke für eure Antworten.
    Hier die Infos:
    [Blockierte Grafik: webkit-fake-url://D2968203-36FB-47D1-94CA-E9E4FB1E0110/image.tiff]

    Die oberste ScrollView soll weg und der Dialogtitel dementsprechend nach oben geschoben werden.

    Im Code wollte ich das Füllen auslagern und habe dafür eine eigene Klasse erstellt.

    Quellcode

    1. -(void)startFill {
    2. float viewHoehe = 0;
    3. float maxBreite = 320.0f;
    4. // Ohne Gallery Platz schaffen:
    5. if (![[BIS_Common sharedInstance] settingsEnableGallery]) {
    6. vController.viewGallery.frame = CGRectMake(0, 0, 0, 0);
    7. vController.viewGallery.hidden = YES;
    8. viewHoehe = vController.viewGallery.frame.size.height;
    9. vController.viewDialogTitel.frame = CGRectMake(vController.viewDialogTitel.frame.origin.x,
    10. vController.viewDialogTitel.frame.origin.y - viewHoehe,
    11. maxBreite,
    12. vController.viewDialogTitel.frame.size.height);
    13. }
    14. if ([xmlData isXmlListe]) {
    15. vController.viewListe.frame = CGRectMake(0,
    16. vController.viewListe.frame.origin.y - viewHoehe,
    17. maxBreite,
    18. vController.viewListe.frame.size.height + viewHoehe);
    19. vController.viewProcess.hidden = YES;
    20. } else {
    21. vController.viewProcess.frame = CGRectMake(0,
    22. vController.viewProcess.frame.origin.y - viewHoehe,
    23. maxBreite,
    24. vController.viewProcess.frame.size.height + viewHoehe);
    25. vController.viewListe.hidden = YES;
    26. }
    27. [self setDialogTitel: vController.labelDialogTitel view:vController.viewDialogTitel];
    28. }
    Alles anzeigen



    Der Aufruf kommt aus der viewDidLoad:

    Quellcode

    1. - (void)viewDidLoad {
    2. [super viewDidLoad];
    3. FillViews *fillView = [FillViews initWithView:self xmlData:[[BIS_Common sharedInstance] lastXmlData]];
    4. [fillView startFill];
    5. [fillView release];
    6. }
  • Mal ne dumme Frage: Hast du die Outlets gesetzt?

    Schau dir mal mit nem NSLog an, ob der obere ScrollView, ob der ScrollView evtl. nil ist.

    Weil wenn du hidden = YES setzt, muss er verschwinden.
    „When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.“
    – James Whitcomb Riley
  • Outlets sind gesetzt, aber:
    Ich habe mal mit Farben die Bereiche unterschiedlich dargestellt.
    Nach dem Umsetzen passiert folgendes:
    Die ScrollView oben scheint tatsächlich verschwunden zu sein !
    Aber die View mit dem Dialogtitel (gelber Hintergrund) wird nicht nach oben verschoben.
    Stattdessen scrollt die TableView bis zum oberen Bildschirmrand, also unter dem Dialogtitel hinweg. (siehe Screenshot)
    osxentwicklerforum.de/index.ph…7d23e3d7283b24dc2c1f5f7cf

    Darf die das ? ?(

    Den Code habe ich inzwischen etwas geändert:

    Quellcode

    1. -(void)startFill {
    2. float viewHoehe = 0;
    3. float maxBreite = 320.0f;
    4. // Ohne Gallery Platz schaffen:
    5. if (![[BIS_Common sharedInstance] settingsEnableGallery])
    6. { DLog(@"Gallery wird entfernt");
    7. vController.viewGallery.hidden = YES;
    8. viewHoehe = vController.viewGallery.frame.size.height;
    9. vController.viewDialogTitel.frame = CGRectMake(0, 0, maxBreite, vController.viewDialogTitel.frame.size.height);
    10. }


    Unter viewDialogTitel liegt nur die Haupt-View.
    Mit dem Setzen des Frames auf Origin 0,0 sollte sie doch ganz oben links sein, oder ?