uitableviewcell source number example data ios objective-c iphone uitableview

ios - source - uitableviewcell swift 3



Cómo configurar el ancho completo del separador en UITableView (14)

Así que tengo una UITableView donde los separadores no tienen todo el ancho. Termina como 10 píxeles antes del lado izquierdo. Estaba jugando con este código en viewDidLoad

self.tableView.layoutMargins = UIEdgeInsetsZero;

también en el guión gráfico cuando puede seleccionar selectores personalizados o predeterminados. Ahora todas las celdas que se rellenan no tienen los selectores de ancho completo pero las celdas que están vacías tienen ancho completo.

¿Cómo puedo arreglar esto?

Gracias por toda la ayuda


  1. Seleccione su UITableViewCell
  2. Ir al Inspector de Atributos
  3. Vaya a Separator y cámbielo a "Insets personalizados"
  4. Establezca los campos left y / o right . (Por defecto a la left: 15 , a la right: 0 )

Mira cómo funciona para mí (usando a la left: 100 ):

Resultado:


Úselo en el método cellForRowAtIndexPath, para configurar las especificaciones del separador de la celda,
funciona perfecto para iOS9.0 +

cell.separatorInset = UIEdgeInsetsZero; cell.layoutMargins = UIEdgeInsetsZero; cell.preservesSuperviewLayoutMargins = NO;


En viewDidLoad (probado iOS11 - swift 4.1)

tratar

tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0)


En su UITableViewCell

Vaya a Attributes Inspector en su Interface Builder y simplemente cambie "15" a 0. Haga esto para todas las celdas que desea cambiar.

Es posible que deba agregar [cell setLayoutMargins: UIEdgeInsetsZero]; a su tableviewcell


Esto funcionó para mí en dispositivos iOS 8.4 - 9.0 usando Xcode 6.4 y Swift 1.2:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell = UITableViewCell() cell.preservesSuperviewLayoutMargins = false cell.separatorInset = UIEdgeInsetsZero cell.layoutMargins = UIEdgeInsetsZero return cell }

Actualización de Swift 3.0

cell.preservesSuperviewLayoutMargins = false cell.separatorInset = UIEdgeInsets.zero cell.layoutMargins = UIEdgeInsets.zero


Nada de lo anterior funcionó para mí en Swift 2.2 y Xcode 7.3.1

Resultó ser la solución más simple de todas. Sin código necesario. Simplemente cambie los valores de los márgenes de diseño de celdas de TableView en su inspector UITableView:


Ninguna de estas soluciones funciona en el iPad, pero he encontrado una solución que cubre ambos dispositivos:

Con células reutilizables:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; ...[other code]... [cell setLayoutMargins:UIEdgeInsetsZero]; [cell setSeparatorInset:UIEdgeInsetsZero]; return cell; }

Con células no reutilizables:

- (void)removeSeparatorInset:(UITableView*)tableView{ NSArray *cells = [tableView visibleCells]; for (UITableViewCell *cell in cells){ [cell setLayoutMargins:UIEdgeInsetsZero]; [cell setSeparatorInset:UIEdgeInsetsZero]; } } -(void) viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [self removeSeparatorInset:self.tableView]; }

Solo para ampliar este enfoque:

@property(nonatomic) UIEdgeInsets separatorInset; @property(nonatomic) UIEdgeInsets layoutMargins;

Ambas propiedades pueden ser utilizadas por UITableView y UITableViewCell. Este último es, de hecho, una propiedad de UIView, que es una clase principal de UITableView y UITableViewCell.


Ok, encontré la respuesta. No sé por qué no me encontré con esta publicación antes, pero, por supuesto, después de publicar una pregunta, de repente aparece justo delante de usted. Recibí la respuesta de esta publicación: iOS 8 UITableView separator inset 0 no funciona

Solo agregue este código en su TableViewController

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero]; } }


Para Swift 3:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) { cell.separatorInset = UIEdgeInsets.zero } if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) { cell.layoutMargins = UIEdgeInsets.zero } if cell.responds(to: #selector(setter: UITableViewCell.preservesSuperviewLayoutMargins)) { cell.preservesSuperviewLayoutMargins = false } }


Para las personas que tienen problemas con el iPad, esto lo pondrá en un estado similar al iPhone. Luego puede ajustar el separadorInset según sea necesario.

tableView.cellLayoutMarginsFollowReadableWidth = false


Probado para iOS 9.3 y Swift 2.2. Asegúrese de poner el código en willDisplayCell que se llama justo antes de mostrar la celda y no en cellForRowAtIndexPath donde crea la celda solamente.

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { cell.separatorInset = UIEdgeInsetsZero cell.layoutMargins = UIEdgeInsetsZero }

Agregue la override a la función para UITableViewController, así: override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {


Yo UITableViewController de UITableViewController y necesitaba adicionalmente las configuraciones de dos inserciones en willDisplayCell para establecer también a preservesSuperviewLayoutMargins en falso. En Swift se ve así:

override func tableView(_tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { if cell.respondsToSelector("setSeparatorInset:") { cell.separatorInset = UIEdgeInsetsZero } if cell.respondsToSelector("setLayoutMargins:") { cell.layoutMargins = UIEdgeInsetsZero } if cell.respondsToSelector("setPreservesSuperviewLayoutMargins:") { cell.preservesSuperviewLayoutMargins = false } }


para Swift 3:

override func viewDidLoad() { super.viewDidLoad() tableView.separatorInset = .zero tableView.layoutMargins = .zero }


para rápido en iOS 9+

si usa una UITableViewCell personalizada:

override var layoutMargins: UIEdgeInsets { get { return UIEdgeInsetsZero } set(newVal) {} }

luego para su tabla vista en viewDidLoad:

self.tableView?.separatorInset = UIEdgeInsetsZero; self.tableView?.layoutMargins = UIEdgeInsetsZero;