Esquinas redondeadas en UITableView

¿Cuál es la mejor manera de obtener esquinas redondas en todo UITableView como se ve en Stocks y Spotlight? El estilo agrupado no resuelve el problema porque las esquinas redondeadas se desplazan con la celda. Intento recortar la vista para que las esquinas estén siempre redondeadas independientemente de la posición de desplazamiento.

Vi otra discusión sobre cómo hacer esto en un UIImage que sugería enmascararlo con otra imagen. No estoy seguro de si esto funcionaría porque necesito que los grifos pasen a la mesa. Esto no es ideal para mí porque quiero que el patrón de fondo se muestre a través de las esquinas.

Es una vieja pregunta, pero tal vez aún quieras saber cómo hacer esto.

Reproduje un tableView como en Stocks / Spotlight. El truco es

view.layer.cornerRadius = 10; 

Para que esto funcione, debe incluir QuartzCore en la clase que llama esa propiedad:

 #import  

Escuché que esto solo funciona desde OS 3.0. Pero dado que mi aplicación está utilizando datos centrales, no fue un problema porque ya era para OS 3.0 y Hight.

Creé una UIView personalizada con una subvista con cornerRadius 10 y con

 view.backgroundColor = [UIColor clearColor]; 

Luego debe colocar un estilo agrupado de UITableView en esa subvista. Debe establecer backgroundColor para clearColor y separatorColor para clearColor. Luego, debe colocar la vista de tabla dentro de la vista de esquina redondeada, esto se hace ajustando el tamaño y el origen del marco. Mi clase loadView de mi UIView personalizada se ve así:

 self.view = [[UIView alloc] init]; self.view.backgroundColor = [UIColor clearColor]; CustomUIViewClass *scherm = [[CustomUIViewClass alloc] init]; CGRect frame; frame.origin.x = 10; frame.origin.y = 50; frame.size.width = 300; frame.size.height = 380; scherm.frame = frame; scherm.clipsToBounds = YES; scherm.layer.cornerRadius = 10; [self.view addSubview:scherm]; CustomUITableViewClass *table = [[CustomUITableViewClass alloc] initWithStyle:UITableViewStyleGrouped]; frame.origin.y = -10; frame.origin.x = -10; frame.size.width = 320; frame.size.height = 400; table.tableView.frame = frame; [scherm addSubview:table.tableView]; 

Espero que entiendas mi inglés, quizás escriba una breve publicación en el blog sobre esta técnica con un proyecto de muestra, publicaré el enlace aquí cuando esté listo.

Una forma más sencilla de hacerlo es importar simplemente el marco QuartzCore a su proyecto. #import a su tableViewController y simplemente configure

 myTableView.layer.cornerRadius=5; 

Esto le dará esquinas redondeadas sin tener que agregar su vista de tabla a una supervista o recortarla.

En lugar de piratear el código, aquí es fácil imitar el estilo agrupado. Esto funciona si todo lo que quieres es una sección.

En Interface Builder:

  • Establezca el estilo UITableView en Normal y haga que el marco con cierto relleno a la izquierda y a la derecha, quizás con x = 10 y ancho = 300.

A continuación, establezca el radio de la esquina y el color usted mismo:

  #import  self.tableView.layer.borderColor = [UIColor colorWithWhite:0.6 alpha:1].CGColor; self.tableView.layer.borderWidth = 1; self.tableView.layer.cornerRadius = 4; 

Aquí está la solución que se me ocurrió. Combina una máscara de capa y una esquina de capaRadius. iPhone OS 3.x solamente. No perdí el tiempo tratando de hacer funcionar las barras de desplazamiento, pero creo que no debería ser demasiado difícil.

http://github.com/beetlebugorg/RoundedUITableView

Otra forma sería enmascarar el UITableView utilizando Core Graphics. Puede encontrar un ejemplo de enmascaramiento de una UIView aquí: http://iphonedevelopment.blogspot.com/2008/11/creating-transparent-uiviews-rounded.html

¿Has probado el estilo de vista de tabla “agrupada”?

 self.tableView.style = UITableViewStyleGrouped; 

Para obtener más referencias, consulte la Guía de progtwigción de la vista de tabla . El capítulo “Acerca de las vistas de tabla” tiene algunas bonitas capturas de pantalla que describen los diferentes estilos.

Hace poco encontré este problema y lo resolví de otra manera. Pensé que compartiría los resultados con todos.

Creé una UIView rectangular con un interior claro y de esquinas redondeadas, y luego coloqué eso encima de UITableView. Puedes encontrar la descripción completa en mi blog de progtwigción .

Funciona exactamente de la manera que yo quiero. Espero que ayude.

Bueno, hay mucho enfoque para resolver este problema.

Sin embargo, en mi caso, todo no funciona correctamente. Mi mesa a veces es más pequeña que el tamaño de la mesa.

Compartiré la forma en que lo hice. Creo que es mucho más fácil y más rápido que algunas de las opciones anteriores.

Haga que el primer y último elemento sean redondeados.

  • Cree CAShapeLayer para arriba (izquierda | derecha) e inferior (izquierda | derecha).

     shapeTop = [CAShapeLayer layer]; shapeTop.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake( 0.0f, 0.0f, 306.0f, 58.0f ) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake( 6.0f, 6.0f )].CGPath; shapeBottom = [CAShapeLayer layer]; shapeBottom.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake( 0.0f, 0.0f, 306.0f, 58.0f ) byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake( 6.0f, 6.0f )].CGPath; 
  • La tabla debe tener un fondo claro clearColor;

  • Las celdas tienen que ser un fondo de color;
  • Establecer el layer.mask de él

     UIView* backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; backgroundView.backgroundColor = [UIColor whiteColor]; cell.backgroundView = backgroundView; 
  • No te olvides de #import

Debajo del código para la versión Swift:

  let redColor = UIColor.redColor() self.tableView.layer.borderColor = redColor.colorWithAlphaComponent(0.9).CGColor self.tableView.layer.borderWidth = 1; self.tableView.layer.cornerRadius = 4; 

Asegúrate de haber import QuartzCore en la sección de importación.