UIScrollView Subview Container Cambia incorrectamente frameworks

Estoy teniendo un problema con las vistas de ChildViewController que tienen sus frameworks automáticamente cambiados a los frameworks de sus padres. Lo destilé a un proyecto de ejemplo con una sola class para ilustrar lo que está sucediendo.

En pocas palabras, yo:

  • tener un ScrollViewController
  • agregue ScrollViewController como RootViewController y agregue a Window
  • En ScrollViewController, en ViewDidLoad, creo una UIView de contenedor con un marco de {{0, 0}, {72704, 768}}
  • Cree una UIScrollView con un marco de {{0, 0}, {1024, 768}}
  • Agregue el ScrollView a la vista ScrollViewController
  • Agregue el contenedor a ScrollView
  • Cree 71 UIViewControllers con un marco de {{0, 0}, {1024, 768}}
  • Agregalos como ChildViewControllers del ScrollViewController
  • Agregue sus subvenciones al contenedor
  • Registre todos los 71 fotogtwigs en ViewDidAppear
  • Cada marco es {{0, 0}, {72704, 768}} – NO 1024 x 768 que establezco.

Todas las subprocesas autorizantes de máscara / autorizaciones establecidas en NO.

¡Esto se está ejecutando en iOS 6 pero también ocurre en iOS 5.1!

¡ACTUALIZAR! Parece que addChildViewController es el culpable de alguna manera. No estoy seguro de por qué: ¿es este comportamiento esperado? Necesito poder agregar estos childViewControllers al ScrollViewController sin que sus frameworks de vistas sean escalados automáticamente a los de sus padres. ¿No es teóricamente la manera de hacerlo?

Además, no hay NIB en ninguna parte. Establezca "translatesAutoresizingMaskIntoConstraints" en NO en Scrollview / ContainerView y en cada una de las 71 vistas de VC. Lo mismo, por desgracia. Esto parece un comportamiento muy extraño …

Enlace al proyecto – https://dl.dropbox.com/u/637000/TestingBug.zip

CÓDIGO DESDE ScrollViewController:

- (void)viewDidLoad { [super viewDidLoad]; [self initScrollView]; [self createTestViews]; } - (void)initScrollView { if(scrollView == nil) { containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 72704, 768)]; containerView.autoresizingMask = UIViewAutoresizingNone; containerView.autoresizesSubviews = NO; scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; scrollView.autoresizingMask = UIViewAutoresizingNone; scrollView.showsHorizontalScrollIndicator = NO; scrollView.showsVerticalScrollIndicator = NO; scrollView.autoresizesSubviews = NO; scrollView.delegate = self; [self.view addSubview:scrollView]; [scrollView addSubview:containerView]; } } - (void)createTestViews { for(int count = 0; count < 71; count++) { [self createTestView]; } } - (void)createTestView { UIViewController *testVC = [[UIViewController alloc] init]; testVC.view.frame = CGRectMake(0, 0, 1024, 768); [self addChildViewController:testVC]; [containerView addSubview:testVC.view]; [testVC didMoveToParentViewController:self]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; for(UIView *subview in containerView.subviews) { // THIS IS {{0, 0}, {72704, 768}} NOT 1024 x 768 NSLog(@"BROKEN FRAME = %@", NSStringFromCGRect(subview.frame)); } } 

En IOS 7.0, use self.automaticallyAdjustsScrollViewInsets = NO; en ViewDidLoad

Cree 71 UIViewControllers con un marco de {{0, 0}, {1024, 768}}

¡Whoa! Esto suena como un uso totalmente innecesario de UIViewController. ¿Puedes manejar sin ella? Lo habitual es agregar vistas directamente a una vista de desplazamiento, sin ninguna intervención de UIViewController.

Para lidiar más directamente con su pregunta: ¿podría estar implicada la reproducción automática? (La respuesta es sí de forma pnetworkingeterminada para cualquier nib nueva creada en Xcode 4.5). No veo que la configuration translatesAutoresizingMaskIntoConstraints enConstructuras a NO, de modo que si la reproducción automática está jugando una parte tal vez networkingimensione las vistas. Por supuesto, tampoco te veo configurando ningún autoresizingMask para comenzar, así que autoresizingMask un valor pnetworkingeterminado que no te estás haciendo cargo.