2012-02-18 10 views
14

Soy novato, por lo que mi pregunta puede ser muy obvia, pero hasta ahora no he encontrado ninguna solución.¿Cómo se establece el tamaño del marco UIScrollView programáticamente?

Lo hice en IB UIScrollView y lo conecté con el propietario del archivo. Me gustaría establecer ahora el tamaño del marco de mi UIScrollView (llamado ScrollView).

const CGFloat BoardWidth = 320; 
const CGFloat BoardHeight = 400; 

//I tried this way but 'Expression is assignable' - said Xcode 
ScrollView.frame.size.width = BoardWidth; 
ScrollView.frame.size.height = BoardWidth; 

¿Cómo puedo configurar los tamaños propios más fáciles de marco ScrollView?

+5

Para referencia futura: por convención en Objective-C, los nombres de clase comienzan con una letra mayúscula, mientras que las * instancias * de clase y los valores escalares comienzan con una letra minúscula. Así 'scrollView',' boardWidth', y would 'boardHeight' sería consistente con la convención. – yuji

Respuesta

15
CGRect scrollFrame = CGRrectMake(x, y, w, h); 
ScrollView.frame = scrollFrame; 

O si solo necesita cambiar el ancho y el alto;

CGRect scrollFrame; 
scrollFrame.origin = ScrollView.frame.origin; 
scrollFrame.size = CGSizeMake(w, h); 
ScrollView.frame = scrollFrame; 

Editar mantener el centro sin cambios:

CGRect scrollFrame; 
CGFloat newX = scrollView.frame.origin.x + (scrollView.frame.size.width - w)/2; 
CGFloat newY = scrollView.frame.origin.y + (scrollView.frame.size.height - y)/2; 
scrollFrame.origin = CGPointMake(newX, newY); 
scrollFrame.size = CGSizeMake(w, h); 
scrollView.frame = scrollFrame; 
+0

Hm ... Parece estar bien, pero me gustaría mantener la posición xey como configuré en Interface Builder. –

+0

Sí, prueba el segundo método que sugerí. Solo cambia el ancho y la altura, y mantiene xey sin cambios. De hecho, un CGRect se compone de un origen donde se almacenan xey, y un tamaño donde se almacenan el ancho y la altura. – sch

+0

Bien, está bien. Derecha. No lo entendí a primera vista. Pero ahora cambia el tamaño de UIScrollView manteniendo el punto superior izquierdo. Entonces, si quiero que siempre esté alineado al centro, tengo que alinearlo ahora, ¿no? –

0

uso de la propiedad contentSize

ScrollView.contentSize = CGSizeMake(320, 520); 

que tiene que ser más grande que el marco de lo que en realidad se desplaza.

4

Puede hacerlo de la siguiente manera,

scrollView.frame = CGRectMake(xOrigin,yOrigin,width,height); 

si usted está buscando para el tamaño de contenido de ScrollView entonces de la siguiente manera,

scrollView.contentSize = CGSizeMake(width,height); 
+0

configurando el tamaño del contenido de esta manera el scrollView no se desplaza. –

1
CGRect Frame = ScrollView.frame 

Frame.frame.size.width = BoardWidth; 
Frame.frame.size.width = BoardWidth; 

ScrollView.frame = Frame; 

Dado que el marco es una estructura ... no se puede establecer el marco de un objeto directamente .. Tendrá que hacer un CEGACT y luego manipularlo.

5

necesita hacer esto, por ejemplo.

ScrollView.frame = CGRectMake(0, 0, BoardWidth, BoardHeight); 

Una vez hecho, también necesita establecer la propiedad contentSize. Es el área que se 'extiende' detrás del marco de su UIScrollView.

Si desea desplazarse sólo en horizontal:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, BoardHeight); 

Si desea desplazarse sólo vertical:

ScrollView.contentSize = CGSizeMake(BoardWidth, h * BoardHeight); 

Si desea desplazarse horizontal y verticalmente:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, h * BoardHeight); 

donde w y h son valores genéricos para incremen t su ancho y/o su altura.

Si desea tener un desplazamiento discreto horizontal (por ejemplo) (por ejemplo, tiene algunas páginas con la misma dimensión de su pantalla).

ScrollView.pagingEnabled = YES; 
ScrollView.contentSize = CGSizeMake(p * BoardWidth, BoardHeight); 

donde p es el número de páginas que desee mostrar.

Espero que ayude.

+0

Hehe, muchas gracias. Ya lo tengo escrito, realmente de la misma manera. : P –

+0

upvote si te gustó ... aplausos :) –

Cuestiones relacionadas