Подтвердить что ты не робот

Невозможно изменить цвет фона ячейки статической таблицы на iOS 7 (iPad)

Я не могу изменить цвет фона статического UITableViewCells на iOS 7 при работе на iPad-устройстве. Вы можете легко проверить это с помощью следующей настройки:

  • Создайте новый универсальный проект в Xcode 5 с двумя раскадными версиями.
  • В каждом раскадровке поместите только один контроллер контроллера таблицы и установите его как начальный.
  • Поместите несколько (например, 3) статических ячеек в представление таблицы в обоих контроллерах/раскадровках.
  • Установите цвет фона каждой статической ячейки в разные цвета в Interface Builder (я использую красные, зеленые и четкие цвета).

Теперь запустите приложение на iPhone и iPad-симуляторах (iOS 7).

На симуляторе iPhone все в порядке,
в то время как на симуляторе iPad все ячейки окрашены в белый цвет.

Я попытался заставить iPad работать правильно, установив свойства среды выполнения в Interface Builder для ячеек:

  • backgroundColor для очистки цвета
  • contentView.backgroundColor для очистки цвета
  • backgroundView в nil

но ничего не помогает. Фактически, установка свойства времени выполнения contentView.backgroundColor изменит цвет ячейки, но не работает с четким цветом (это означает, что за ним стоит другое изображение, окрашенное в белый цвет).

Очень странно, что два устройства в одной версии iOS дают разные результаты. Может ли кто-нибудь еще подтвердить эту ошибку?

У кого-нибудь есть решение этой проблемы, или единственный способ перейти на динамические свойства + установить цвет в cellForRowAtIndexPath? Я хотел бы использовать статические ячейки, потому что характер проблемы статический.

p.s. Я просто понял, что забыл попробовать установить свойство backgroundView.backgroundColor runtime, чтобы очистить цвет, и у меня нет доступа к Mac на данный момент. Может быть, это будет трюк.

4b9b3361

Ответ 1

Сделайте это:

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

Работайте со мной на IOS7

Ответ 2

Согласно Apple doc:

Если вы используете предопределенную или настраиваемую ячейку, вы можете изменить фон ячеек с помощью свойства backgroundView или изменив унаследованное свойство backgroundColor. В iOS 7 ячейки по умолчанию имеют белый фон; в более ранних версиях iOS ячейки наследуют цвет фона в представлении таблицы. Если вы хотите изменить цвет фона ячейки, сделайте это в tableView:willDisplayCell:forRowAtIndexPath: методе делегата представления таблицы.

Итак, независимо от того, какой цвет вы установили в tableView:cellForRowAtIndexPath:, iOS 7 изменит его на белый позже. Просто установите его в tableView:willDisplayCell:forRowAtIndexPath:. Работал для меня отлично.

Ответ 3

Единственный способ решить эту проблему - сделать программную программу вместо использования раскадровки. Для справки я опубликую свое решение, надеюсь, что это может помочь кому-то.

Я заменил uitableviewcontroller для uiviewcontroller.

затем добавил следующее:

заголовочный файл

#import <UIKit/UIKit.h>

@interface LtHomeViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSArray *mFiles;
NSArray *mPics;
}

@end

И файл модуля

#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 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

Теперь я не знаю, поможет ли только эта строка, но поскольку мне нужно больше вещей, я принял подход к созданию таблицы вручную

- (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];
}

Дэвид

Ответ 4

Существует намного более простой способ переопределить цвет фона ячейки. Подкласс UITableViewCell и установите его как класс для ячейки static tableview. Затем переопределите:

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

где [UIColor...] = любой цвет, который вы хотите (например, [UIColor clearColor] и т.д.);

Ответ 5

Вместо этого измените цвет фона ContentView, и он будет работать.

Ответ 6

просто напишите эту строку

[ячейка setBackgroundColor: [UIColor clearColor]];

в вашей функции перед оператором return

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

Потому что в документации iOS7 четко сказано, что цвет по умолчанию для каждой ячейки таблицы белый. Итак, если вы хотите изменить его, вы должны изменить его из своего кода. Не забудьте установить свойство фона для очистки цвета вашего табличного представления из Инспекторов > Атрибуты (справа).

надеюсь, что это поможет... поскольку это сработало для меня...!