uitableviewcontroller uitableviewcell tutorial tablas pantalla opaca hora como colores color cambio cambiar apariencia iphone ios objective-c ipad uitableview

iphone - uitableviewcell - No se puede cambiar el color de fondo de la celda de vista de tabla estática en iOS 7(iPad)



uitableview swift4 (7)

Cambia el color de fondo de ContentView y funcionará.

No puedo cambiar el color de fondo de UITableViewCells estático en iOS 7, cuando se ejecuta en un dispositivo iPad. Puede verificarlo fácilmente con la siguiente configuración:

  • Haga un nuevo proyecto universal en Xcode 5 con dos storyboards.
  • En cada guión gráfico, coloque solo un controlador - controlador de vista de tabla, y configúrelo como el inicial.
  • Ponga unas pocas (por ej. 3) celdas estáticas en la vista de tabla en ambos controladores / storyboards.
  • Establezca el color de fondo de cada celda estática en diferentes colores en Interface Builder (uso rojo, verde y colores claros).

Ahora, ejecute la aplicación en simuladores de iPhone e iPad (iOS 7).

En el simulador de iPhone, todo está bien;
mientras está en el simulador de iPad, todas las celdas son de color blanco.

Intenté obligar al iPad a funcionar correctamente estableciendo las propiedades de tiempo de ejecución en el Creador de interfaces para las células:

  • backgroundColor para borrar el color
  • contentView.backgroundColor para borrar el color
  • backgroundView a nil

pero nada ayuda. En realidad, establecer la propiedad en tiempo de ejecución de contentView.backgroundColor cambiará el color de la celda, pero no funciona con un color claro (lo que significa que hay otra vista coloreada en blanco detrás de ella).

Es muy extraño que dos dispositivos en la misma versión de iOS produzcan resultados diferentes. ¿Alguien más puede confirmar este error?

¿Alguien tiene una solución para este problema, o la única manera es ir por propiedades dinámicas + configuración de color en cellForRowAtIndexPath ? Me gustaría usar células estáticas, porque la naturaleza del problema es estática.

ps Me acabo de dar cuenta de que olvidé tratar de establecer la propiedad de tiempo de ejecución backgroundView.backgroundColor para borrar el color, y no tengo acceso a una Mac en este momento. Tal vez eso sería el truco.


De acuerdo con el documento de Apple :

Ya sea que use una celda predefinida o personalizada, puede cambiar el fondo de la celda usando la propiedad backgroundView o cambiando la propiedad heredada de backgroundColor . En iOS 7, las celdas tienen un fondo blanco por defecto; en versiones anteriores de iOS, las celdas heredan el color de fondo de la vista de tabla adjunta. Si desea cambiar el color de fondo de una celda, hágalo en el tableView:willDisplayCell:forRowAtIndexPath: de su delegado de la vista de tabla.

Por lo tanto, no importa el color que establezca en tableView:cellForRowAtIndexPath: iOS 7 lo cambia a blanco más adelante. Simplemente tableView:willDisplayCell:forRowAtIndexPath: en tableView:willDisplayCell:forRowAtIndexPath: Trabajó para mí perfectamente.


En C # puedes hacer esto:

public class CustomTableViewController : UITableViewController { public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { var cell = base.GetCell(tableView, indexPath); cell.BackgroundColor = UIColor.Clear; return cell; } }


Hacer esto:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *pattern = [UIImage imageNamed:@"image.png"]; [cell setBackgroundColor:[UIColor colorWithPatternImage:pattern]]; }

Trabaja para mí en IOS7


Hay una forma mucho más sencilla de anular el color de fondo de la celda. Subclass UITableViewCell y establézcalo como la clase para la celda de tabla de visión estática. Luego anule:

-(void) willMoveToSuperview:(UIView *)newSuperview { self.backgroundColor = [UIColor ...]; }

donde [UIColor ...] = el color que desee (por ejemplo, [UIColor clearColor], etc.);


La única forma en que podía solucionar este problema era crear la tabla programáticamente en lugar de usar el guión gráfico. Como referencia, publicaré mi solución, espero que pueda ayudar a cualquiera.

Reemplacé el controlador de uitableview por un controlador de miradas.

luego agregué esto:

el archivo de encabezado

#import <UIKit/UIKit.h> @interface LtHomeViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { NSArray *mFiles; NSArray *mPics; } @end

Y el archivo del módulo

#import "LtHomeViewController.h" #import "LtHomeToolbar.h" #import "LtHomeCustomCell.h" @interface LtHomeViewController () <LtHomeToolbarDelegate> @end @implementation LtHomeViewController { LtHomeToolbar *mainToolbar; UITableView *theListView; } #define TOOLBAR_HEIGHT 64.0f -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; CGRect toolbarRect = self.view.bounds; // View controller''s view bounds toolbarRect.size.height = TOOLBAR_HEIGHT; mainToolbar = [[LtHomeToolbar alloc] initWithFrame:toolbarRect]; // At top mainToolbar.delegate = self; [self.view addSubview:mainToolbar]; // mFiles = [[NSArray alloc] initWithObjects:@"../Lumina.app/lumina0.pdf", @"../Lumina.app/lumina8.pdf", @"../Lumina.app/lumina9.pdf", @"../Lumina.app/lumina10.pdf", nil]; mPics = [[NSArray alloc] initWithObjects:@"vol0.jpg", @"vol8.jpg", @"vol9.jpg", @"vol10.jpg", nil]; // CGRect tableViewFrame = self.view.bounds; tableViewFrame.origin.y = TOOLBAR_HEIGHT; tableViewFrame.size.height = self.view.bounds.size.height - TOOLBAR_HEIGHT; theListView = [[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain]; theListView.delegate = self; theListView.dataSource = self; theListView.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0]; [self.view addSubview:theListView]; } #pragma mark - UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView { return 1; } - (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section { return [mFiles count]; } - (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"HomeCell"; // Similar to UITableViewCell, but LtHomeCustomCell *cell = (LtHomeCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[LtHomeCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } cell.image.image = [UIImage imageNamed:[mPics objectAtIndex:indexPath.row]]; NSString *magName = [[mFiles objectAtIndex:indexPath.row]stringByReplacingOccurrencesOfString:@"../Lumina.app/" withString:@""]; magName = [magName stringByReplacingOccurrencesOfString:@"lumina" withString:@""]; magName = [magName stringByReplacingOccurrencesOfString:@".pdf" withString:@""]; magName = [[@"Triathlon LUMINA " stringByAppendingString:magName]stringByAppendingString:@"号"]; cell.descriptionLabel.text = magName; return cell; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 110; } #pragma mark - UITableViewDelegate - (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { } @end

Ahora no sé si solo esta línea te ayudará pero como necesito más cosas, tomé el enfoque de hacer la tabla manualmente

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0]; }

David


solo escribe esta linea

[cell setBackgroundColor: [UIColor clearColor]];

en su función antes declaración de devolución

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

Porque en la documentación de iOS7, se dice claramente que el color predeterminado de cada celda de la tabla es blanco. Por lo tanto, si desea cambiarlo, debe cambiarlo de su código. Recuerde establecer la propiedad de fondo para borrar el color de la vista de tabla desde el inspector Utilidades> Atributos (en el lado derecho).

Espero que ayude ... ¡ya que funcionó para mí ...!