iOS8 NavigationController setzt Frame erst in viewDidAppear???

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

  • iOS8 NavigationController setzt Frame erst in viewDidAppear???

    Hi,

    ich habe einen einfachen NavigationController der Modal als Sheet angezeigt wird. Dort habe ich eine TableView. Klick ich dort auf eine Zelle, pushe ich einen ScrollViewController (Da es sich um ein Auftragsprojekt handelt habe ich die Klassennamen geändert. Also da bitte nicht drüber aufregen das die recht sinnfrei sind)

    Quellcode

    1. self.navigationController.navigationBar.translucent=NO;
    2. self.navigationController.toolbar.translucent=NO;
    3. self.wantsFullScreenLayout=NO;
    4. scrollViewController *sController=[[ScrollViewController alloc] initWith.....];
    5. [self.navigationController pushViewController:sController animated:YES];


    Im ScrollViewController selber muss ich nun X ChildViewController einsetzen. Dazu setze ich die ContentSize des SCrollView auf

    Quellcode

    1. [self.scrollView setContentSize:CGSizeMake(self.scrollView.frame.size.width*self.bloecke.count,self.scrollView.frame.size.height)];


    Wobei bloecke halt das Array der ChildViewController ist.

    Nun berechne ich die Position der ChildViewController mit

    Quellcode

    1. fController.view.frame=CGRectMake(SCROLLVIEW_CONTENT_PADDING/2+index*self.scrollView.frame.size.width,
    2. fController.view.frame.origin.y,
    3. self.scrollView.frame.size.width-SCROLLVIEW_CONTENT_PADDING,
    4. self.scrollView.frame.size.height);


    Das Ganze habe ich bisher im viewWillAppear gemacht und das hat auch wunderbar geklappt. Unter iOS8 geht das aber nicht mehr. Und zwar deshalb, weil im viewWillAppear die

    Quellcode

    1. self.scrollView.frame.size.width


    noch nicht stimmt. Da steht irgendwas von 864 drin. Der richtige Wert wäre aber 608. In viewDidAppear steht dann auch 608 drin. Wenn ich das Erzeugen und Positionieren der ChuldViewControiller also in viewDidAppear verlege, dann geht wieder alles. Nur sieht das halt mega scheisse aus, da die ChileViewController dann erst erscheinen wenn der Scrollview schon da ist.

    Gibt es einen anderen Weg das sauber zu machen?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Bringt marginale Vorteile. Dann erscheinen zwar die ChildViewController schon vor dem ScrollViewController aber deren Inhalte erscheinen erst danach. Also ich sehe dann die leeren ChildViewController auf dem Scrollview und etwas später werden diese erst mit Inhalt gefüllt.

    Weiterhin habe ich das Problem, dass diese ChildViewController dynamisch hinzugefügt und gelöscht werden können. Mache ich das Erzeugen der ChildViewController im viewDidLayoutSubviews, dann wird dieses wohl auch aufgerufen, wenn ich einen ChildViewController entferne oder hinzufüge, was wieder zu unangenehmen Nebeneffekten führt. Das läßt sich fixen aber ist den Aufwand für oben beschriebene kleine Verbesserung eigentlich nicht wert.

    Trotzdem Danke

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Sehr komisch,

    nachdem ich es nun umgebaut habe dass ich erzeugen und positionieren der ChildViewControlller seperiert habe, geht alles einwandfrei mit dem viewDidLayoutSubviews.

    Ka warum aber Problem gelöst.

    Danke

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • viewDidLayoutSubviews wird wiederholt aufgerufen. Von daher musst Du natürlich prüfen und sicherstellen, dass Du nicht jedes mal ChildViewController erzeugst und zum ScrollView hinzu fügst.

    Daher auch mein Hinweis:
    Dort kannst Du dann prüfen ob die ChildViewController schon erzeugt und positioniert wurden oder nicht.

    Evtl. hätte ich anstelle von "kannst" lieber "musst" verwenden sollen. ;)