2010-12-07 3 views
1

in meiner app rotierenden füge ich eine Ansicht von XIB beladen mit UIViewAutosizingMaskFlexibleWidth und haben das gewünschte Ergebnis nur in einem von zwei Fällen:Autosizing funktioniert nicht, wenn sie von XIB Beladung nach

  1. subview auf Portrait zugibt und Drehen in die Landschaft ändert die Größe der Unteransicht korrekt;
  2. Das Hinzufügen einer Unteransicht zu einer Landschaft führt nicht dazu, dass die Unteransicht ihre Breite ändert, wie dies beim Drehen der Fall ist. Hier

ist der Code:

viewMenuList = [[MenuListController alloc] initWithNibName:@"MenuListController" bundle:[NSBundle mainBundle]]; 
viewMenuList.view.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
self.view.autoresizesSubviews = YES; 
[self.view addSubview:viewMenuList.view]; 
[self.view sendSubviewToBack:viewMenuList.view]; 
[viewMenuList.view setNeedsLayout]; 
[viewMenuList.view setNeedsDisplay]; 
NSLog(@"frame do menu links view %f, %f, %f, %f", self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); 
NSLog(@"frame do menu list view %f, %f, %f, %f", viewMenuList.view.frame.origin.x, viewMenuList.view.frame.origin.y, viewMenuList.view.frame.size.width, viewMenuList.view.frame.size.height); 

Die Ausgabe in der Konsole:

2010-12-07 16:34:22.552 SlideShow_iPad[19352:207] frame do menu links view 0.000000, 0.000000, 1030.000000, 111.000000 
2010-12-07 16:34:22.596 SlideShow_iPad[19352:207] frame do menu list view 0.000000, 0.000000, 768.000000, 109.000000 

Die letzte Zeile sollte eine Breite von 1030 angezeigt werden, es shouldnt? Die Größe wird auf 1030 geändert, nachdem Sie zum Hochformat und zurück in die Landschaft gedreht haben.

Die seltsamste Sache ist, dass ich die gleiche Technik in der Superview verwende und arbeitete.

Antwort

0

Sie sollten den Interface Builder und den Objective-C-Code nicht mischen, um die Größenänderung zu handhaben. Entfernen Sie autoresizingMask und autoresizesSubviews vom Code und tun beide nur in Interface Builder. Sie könnten jetzt widersprüchliche Definitionen haben.

autoresizingMark: command-3 zum Anzeigen der Größeneigenschaften. Überprüfen Sie "Autosizing" Teil, die Animation zeigt ziemlich gut, wie Ihre Größe aussehen wird.

autoresizesSubviews: Befehl-1, um Zeichnungseigenschaften anzuzeigen. Dafür gibt es ein Kontrollkästchen.

+0

Tatsache ist, dass das tatsächliche Verhalten korrekt ist. Das Problem ist, dass ich die Definition von Autosizing missverstanden habe. Autosizing bedeutet nicht, dass es die Rahmengröße beim Hinzufügen einer Unteransicht definiert. –

Verwandte Themen