37

在 iPad 设备上运行时,我无法更改 iOS 7 上静态 UITableViewCells 的背景颜色。您可以通过以下设置轻松检查:

  • 在 Xcode 5 中使用两个故事板制作一个新的通用项目。
  • 在每个情节提要中,只放置一个控制器 - 表视图控制器,并将其设置为初始控制器。
  • 在两个控制器/故事板的表格视图中放置几个​​(例如 3 个)静态单元格。
  • 在 Interface Builder 中将每个静态单元格的背景颜色设置为不同的颜色(我使用红色、绿色和透明颜色)。

现在,在 iPhone 和 iPad 模拟器 (iOS 7) 上运行该应用程序。

在 iPhone 模拟器上,一切正常;
而在 iPad 模拟器上,所有单元格都是白色的。

我试图通过在 Interface Builder 中为单元格设置运行时属性来强制 iPad 正常工作:

  • backgroundColor清除颜色
  • contentView.backgroundColor清除颜色
  • backgroundView为零

但没有任何帮助。实际上,设置 的运行时属性contentView.backgroundColor会改变单元格的颜色,但它不适用于清晰的颜色(这意味着它后面还有另一个白色的视图)。

奇怪的是,同一版本的 iOS 上的两台设备会产生不同的结果。其他人可以确认这个错误吗?

有没有人解决这个问题,或者唯一的方法是去动态属性+设置颜色cellForRowAtIndexPath?我想使用静态单元格,因为问题的本质是静态的。

ps 我刚刚意识到我忘记尝试将backgroundView.backgroundColor运行时属性设置为清除颜色,并且我目前无法访问 Mac。也许这会奏效。

4

6 回答 6

57

做这个:

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

在 IOS7 上为我工作

于 2013-09-29T22:59:56.377 回答
10

根据Apple的文档

无论您使用预定义单元格还是自定义单元格,都可以使用backgroundView属性或通过更改继承的backgroundColor属性来更改单元格的背景。在 iOS 7 中,单元格默认为白色背景;在早期版本的 iOS 中,单元格继承了封闭表格视图的背景颜色。如果要更改单元格的背景颜色,请在tableView:willDisplayCell:forRowAtIndexPath:表格视图委托的方法中进行。

所以不管你设置什么颜色tableView:cellForRowAtIndexPath:,iOS 7 以后都会把它改成白色。只需将其设置在tableView:willDisplayCell:forRowAtIndexPath:. 完美地为我工作。

于 2013-10-08T04:09:04.540 回答
2

我可以解决此问题的唯一方法是以编程方式制作表格而不是使用情节提要。作为参考,我将发布我的解决方案,希望它可以帮助任何人。

我用 uiviewcontroller 替换了 uitableviewcontroller。

然后添加了这个:

头文件

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

现在我不知道是否只有这条线会帮助你,但由于我需要更多的东西,我采取了手动制作表格的方法

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

大卫

于 2013-09-27T02:22:30.393 回答
1

改为更改 ContentView 背景颜色,它将起作用。

于 2014-08-23T00:58:18.077 回答
1

有一种更简单的方法可以覆盖单元格背景颜色。子类 UITableViewCell 并将其设置为静态 tableview 单元格的类。然后覆盖:

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

其中 [UIColor ...] = 你想要的任何颜色(例如 [UIColor clearColor] 等);

于 2014-07-28T16:44:00.657 回答
0

只写这一行

[单元格设置背景颜色:[UIColor clearColor]];

在 return 语句之前的函数中

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

因为在 iOS7 文档中明确表示每个表格单元格的默认颜色是白色。所以,如果你想改变它,那么你必须从你的代码中改变它。请记住从实用程序 > 属性检查器(在您的右侧)中设置背景属性以清除表格视图的颜色。

希望它有帮助......因为它对我有用......!

于 2013-10-04T06:07:28.293 回答