2012-06-18 4 views
6

Creé un UIScrollView en el guión gráfico, lo vinculé como una propiedad para el controlador de vista, y ahora estoy tratando de agregar algunas subvistas con paginación. Pero, aunque establecí las dimensiones en el guión gráfico gráficamente, el marco de UIScrollView termina siendo 0,0,0,0. ¿Tengo que codificar las dimensiones aunque ya las haya especificado gráficamente en el guión gráfico?ScrollView creado en el guión gráfico inicializado con el marco 0,0,0,0

Además, tipo de relacionado, ¿es posible personalizar las subvistas en el guión gráfico para usar en esta vista de desplazamiento? Parece que no puedo crear una vista a menos que ya esté dentro de un controlador. Como solo tengo un controlador y potencialmente múltiples vistas que quiero configurar gráficamente, ¿cómo hago esto sin tener que hacerlo programáticamente?

+0

¿Cómo dibujó UIScrollView? ¿Lo dibujó en su ViewController o forma libre? –

+0

Lo arrastré como un objeto desde el guión gráfico al ViewController. – user1096786

+0

¿Cómo sabes que es 0,0,0,0? Debería tener el mismo tamaño que la vista de desplazamiento que arrastraste al ViewController. –

Respuesta

16

Con guiones gráficos viewDidLayoutSubviews es donde puede obtener el tamaño de todas sus vistas. viewWillAppear no funcionó para mí y siempre devolvió (0,0,0,0);

+1

Tenga en cuenta también un truco es que puede tomar los tamaños de las subvistas contenidas allí y luego agregar el código de diseño para las subvistas de esas subvistas que ahora conocen el marco/límites. –

0

Probablemente establezca el punto de interrupción en una línea donde la vista aún no estaba configurada. Prueba esto:

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     CGRect frame = self.scrollView.frame; 
     NSLog (@"FRAME IS %@", NSStringFromCGRect(frame)); 
    } 
    return self; 
} 
1

descubrí que cuando accedo a la ScrollView en viewWillAppear, el marco realidad dará los números correctos. Anteriormente probé esto en awakeFromNib y viewDidLoad y obtuve también el marco 0,0,0,0.

Lo que es extraño es que antes de Storyboard, puedas obtener las dimensiones de fotograma correctas en awakeFromNib. Un ejemplo de esto está en uno de los códigos de muestra de Apple PageControl.

En resumen, para responder a la pregunta, intente acceder desde viewWillAppear (suponiendo que haya creado UIScrollView en Storyboard).

+1

De la discusión 'awakeFromNib': Se envía un mensaje awakeFromNib a cada objeto cargado desde el archivo, pero solo si puede responder al mensaje, y solo después de que todos los objetos en el archivo se hayan cargado e inicializado. Cuando un objeto recibe un mensaje awakeFromNib, se garantiza que tiene establecidas todas sus variables de instancia de salida. Y de lo que probé obtengo nula referencia a mi outlet en este método. Entonces quizás esta suposición ya no sea cierta con el guión gráfico y la documentación necesita ser actualizada. Aunque ya tengo el marco de mis salidas configurado en 'viewDidLoad'. – florian

+0

Disculpe, tengo el problema exacto por tratar de arrastrar el UIScrollView al guión gráfico y el inspector de tamaño definió su tamaño. Sin embargo, establecí un punto de interrupción en 'viewWillAppear' (no' viewDidLoad' !!) y todavía dice que el marco es {0,0,0,0}. Aunque puedo volver a configurarlo manualmente, ¿qué ocurre cuando UIScrollView se carga desde el guión gráfico? – Yeung

+0

Oye, descubrí que puedo acceder al valor de fotograma correcto en 'viewDidAppear'. Estoy construyendo en Xcode 4.5 y para iPhone 6.0 Simulator. ¿No hay algo de actualización causa esto? – Yeung

3

Con guiones gráficos de las salidas de un controlador no están conectados antes de viewDidLoad y el tamaño de la misma no se establece hasta viewWillAppear, ver aquí:

http://cs193p.m2m.at/lecture-8/

Tan pronto como el controlador está totalmente instancia y sus salidas son conectado viewDidLoad: se llama. Por lo tanto, este es un buen lugar para poner el código de configuración . Sin embargo, el tamaño del controlador aún no está establecido, pero en viewWillAppear: que se llama justo antes de que aparezca la vista en la pantalla .

Así que creo que la sugerencia de Enricos es correcta. Solo intenta poner las cosas relacionadas con el tamaño en viewWillAppear.

+0

viewDidLayoutSubviews para guiones gráficos. Ver mi comentario a continuación. –

0

Es bastante simple: Deshabilitar Usar Autolayout en la configuración del Guión gráfico.

Disable Use Autolayout in the Storyboard settings (red rectangle)

Cuestiones relacionadas