2011-06-06 9 views
26

Me gustaría dibujar una línea insertada simple en Interface Builder para separar algunos elementos en una lista y hacer que la UI sea un poco más ordenada. No veo ninguna "línea" u objetos similares en la biblioteca de objetos y no puedo encontrar ningún comando de dibujo en el constructor de Interfaz.Cómo dibujar una línea en el constructor de interfaces en Xcode 4

Respuesta

60

Uso una UIView muy estrecha con backgroundColor con el color apropiado.

+0

¿viola esto alguna de las pautas de Apple? ¿Sus aplicaciones con esta solución alternativa pasaron por el proceso de aprobación de Apple? – Kongress

+0

No, esto no infringe ninguna norma y mis aplicaciones han sido aprobadas. –

+0

Menos que ideal, pero funciona. Gracias. – Kongress

7

No hay líneas en la biblioteca de UI del iPhone. Esta funcionalidad en Max OS X fue suministrada por NSBox, pero en el iPhone no hay un elemento de interfaz de usuario correspondiente.

+0

Bastante. Alguna idea para soluciones? – Kongress

0

Utilicé una vista y la hice estrecha & cambié el color para que pareciera una línea. Pero mi problema es que estoy usando la línea en una vista de desplazamiento vertical y las líneas también se desplazan.

1

En lugar de ver, ¿por qué no usar una etiqueta y establecer el color de fondo adecuado?

+0

A UILabel hereda de UIView. Entonces, básicamente estás haciendo lo mismo. Además, como no hay texto en una línea, no necesitaría la funcionalidad adicional que trae consigo UILabel. –

7

Si tiene miedo de que una UIView pueda afectar el rendimiento, puede dibujar una línea en el código utilizando CAShapeLayers de CoreGraphics.

Cada UIView tiene un CALayer, así que dibuja la línea y agrégala a las vistas CALayer. Usted puede hacer esto ya sea en drawRect de un UIView personalizado o en su controlador de vista:

(Asegúrese de añadir marco de cuarzo para su proyecto)

UIBezierPath *linePath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0,self.view.frame.size.width, 1)]; 

//shape layer for the line 
CAShapeLayer *line = [CAShapeLayer layer]; 
line.path = [linePath CGPath]; 
line.fillColor = [[UIColor blackColor] CGColor]; 
line.frame = CGRectMake(xPosition, yPosition, self.view.frame.size.width,1); 

[self.view.layer addSublayer:line]; 
0

Interface Builder no le permiten dibujar las sombras esenciales para una línea insertada Si trabajas con Photoshop, sabes esto.

El siguiente código dibujará un "recuadro" si la línea está delante de un Fondo blanco/beige.

UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 1.0f)]; 
line.backgroundColor = [UIColor colorWithRed:(200.0f/255.0f) green:(200.0f/255.0f) blue:(200.0f/255.0f) alpha:1.0f]; 
line.layer.shadowColor = [UIColor darkGrayColor].CGColor; 
line.layer.shadowOffset = CGSizeMake(0.0f, 1.0f); 
line.layer.shadowRadius = 0.5f; 
line.layer.shadowOpacity = 0.4f; 
line.layer.masksToBounds =NO; 
[Background addSubview:line]; 

Recuerde que importar < QuartzCore/QuartzCore.h>.

0

Como aliterador: en el Creador de interfaces, agregue una vista cuya altura se establece en 2 puntos. Conecte un IBOutlet a esa vista y establezca el color y el ancho del borde de la capa:

self.mySeparatorLine.layer.borderWidth = 1.0f; self.mySeparatorLine.layer.borderColor = [UIColor lightGrayColor] .CGColor;

Cuestiones relacionadas