2011-12-04 17 views

Respuesta

16

Necesitas subclase UITableViewCell y anular layoutSubviews método:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    CGRect tmpFrame = self.imageView.frame; 
    tmpFrame.origin.x += 10; 
    self.imageView.frame = tmpFrame; 

    tmpFrame = self.textLabel.frame; 
    tmpFrame.origin.x += 10; 
    self.textLabel.frame = tmpFrame; 

    tmpFrame = self.detailTextLabel.frame; 
    tmpFrame.origin.x += 10; 
    self.detailTextLabel.frame = tmpFrame; 
} 
+1

que es una solución bastante simple y fácil, necesita crear una nueva subclase 'UITableViewCell' con este código y cambiar su' tableView: cellForRowAtIndexPath: 'para asignar sus celdas subclasificadas en lugar de' UITableViewCell'. –

2

¿No tendría más sentido hacer que UITableViewCell sea más alto que el contenido para empezar? Si está contenido siempre es 100px de alto, simplemente hacer que el 110px celular para conseguir que el espacio 10px extra que necesita, no necesita celda personalizado :)

+0

quiero que el margen izquierdo sea 10px extra – JAHelia

+0

, esta no es una página HTML, usted tiene un espacio limitado de 320 píxeles, por lo que solo necesita asegurarse de que está utilizando solo los 310 píxeles más adecuados, entonces los 10pixeles izquierdos son libres y se usan como "espaciado". –

+0

sí, sé este punto, pero ¿cómo establecer el margen izquierdo de la celda? – JAHelia

1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Este método devolverá la célula, puede configurar celular en ella . Simplemente ajuste el marco de los controles, muévalos a la posición calculada.

+0

¿Puedes publicar un fragmento de código que muestre cómo aumentar el margen izquierdo (o relleno-equivalente izquierdo) de la celda en este método? – JAHelia

1

Para establecer el margen izquierdo se puede utilizar:

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:  (NSIndexPath *)indexPath 
{ 
    return 1; 
} 
+2

Esto no establece un margen, establece la profundidad de la fila especificada para mostrar su posición jerárquica en la sección. – Daniel

+0

Esta solución es muy inteligente, pero no se puede usar si desea disminuir el margen predeterminado, lamentablemente ... – turingtested

1

Andrey tiene una buena solución, pero si se utiliza la vista accesorio necesita este código:

const int MARGIN = 16; // Left and right margin 

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    /* Add left margin to the image and both labels */ 
    CGRect frame = self.imageView.frame; 
    frame.origin.x += MARGIN; 
    self.imageView.frame = frame; 

    frame = self.textLabel.frame; 
    frame.origin.x += MARGIN; 
    frame.size.width -= 2 * MARGIN; 
    self.textLabel.frame = frame; 

    frame = self.detailTextLabel.frame; 
    frame.origin.x += MARGIN; 
    frame.size.width -= 2 * MARGIN; 
    self.detailTextLabel.frame = frame; 

    /* Add right margin to the accesory view */ 
    if (self.accessoryType != UITableViewCellAccessoryNone) { 
     float estimatedAccesoryX = MAX(self.textLabel.frame.origin.x + self.textLabel.frame.size.width, self.detailTextLabel.frame.origin.x + self.detailTextLabel.frame.size.width); 

     for (UIView *subview in self.subviews) { 
      if (subview != self.textLabel && 
       subview != self.detailTextLabel && 
       subview != self.backgroundView && 
       subview != self.contentView && 
       subview != self.selectedBackgroundView && 
       subview != self.imageView && 
       subview.frame.origin.x > estimatedAccesoryX) { 

       // This subview should be the accessory, change its frame 
       frame = subview.frame; 
       frame.origin.x -= MARGIN; 
       subview.frame = frame; 
       break; 
      } 
     } 
    } 
} 

No hay wa fácil y para tratar con la vista de accesorios. He estado buscando por un tiempo y esta es la mejor solución que he visto hasta ahora.

Cuestiones relacionadas