我如何设置UITableView的背景(桌面风格是“分组”)使用图像?

我如何设置UITableView的背景(桌面风格是“分组”)使用图像?

在较新版本的SDK中,如果你希望它是透明的,你需要设置tableView.backgroundView ,像这样:

 tableView.backgroundColor = [UIColor clearColor]; tableView.opaque = NO; tableView.backgroundView = nil; 

我们需要对这个简单的背景做些事情。 我们将使用PNG图像并将其显示在UITableView的后面。

  1. 准备一个PNG图像。 它应该是320×460(如果您的应用程序中显示状态栏)或320×480(如果您隐藏它)。
  2. 把它拖到XCode到Resources文件夹中并添加到你的项目中
  3. 将包含UITableView的NIB文件加载到Interface Builder中
  4. 打开库(工具>库),切换到媒体选项卡,并将图像拖到视图,创build一个新的UIImageView。
  5. 使用检查器来移动和调整图像的大小,使其位于X = 0,Y = 0,宽度= 320,高度= 480
  6. 把UIImageView放在UITableView(Layout> Send to Back)
  7. 保存,build立和去!

令人失望的是,你将无法看到你的背景。 UITableView的背景阻止我们看到UIImageView。 有三个你需要做的改变:

  1. 在属性检查器中,确保UITableView的“不透明”checkbox未被选中!
  2. 将UITableView的背景颜色设置为透明:

    tableView.backgroundColor = [UIColor clearColor];

我希望这有助于解决您的问题。 它已经为我工作,我还没有find一个更优雅的方式来显示一个UITableView的背景图像。

与直接在UITableView上设置背景图像相比,我的解决scheme的优点是可以缩进表格的内容。 我经常想要做到这一点,只是在屏幕的底部显示两个或三个表格单元格。

 [tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"whatever.png"]]]; 

tableView.backgroundView = nil; 足够。 无需将背景颜色设置为“清除颜色”。

一种方法是使表视图透明(将视图的背景设置为0%不透明度),并将UIImageView放置在UITableView后面。 请记住,透明表格和表格单元不会像不透明的表格一样好。

在UI Builder中,背景色具有“其他”选项。 这带来了一个颜色select器。 颜色select器具有不透明度设置。 如果您将COLOR的Opacity设置为0,则效果不佳。

我发现的是,你必须使用带有透明背景的“普通”风格的表格,然后通过将每个单元格的backgroundView设置为具有模拟圆形外观的图像的UIImageView来重新创build圆angular单元格的外观。 这意味着顶部,底部和中间的单元需要不同的背景图像。

但是,这并不能解决用户点击单元格时会发生什么,而是“突出显示” – 它会看起来平方。 您可以通过为您的伪造单元格背景图像设置突出显示的图像来解决此问题。 您还需要创build一个白色突出显示版本的自己的披露辅助视图(ImageView)。 然后你可以创build一个像这样的单元格(下面)。 我分配了其中一个单元格后,将backgroundView和accessoryView设置为我的UIImageViews。

 #import "ClearBackRoundedTableCell.h" @implementation ClearBackRoundedTableCell - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) { } return self; } - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { if( [[self.accessoryView class] isSubclassOfClass:[UIImageView class]] ) ((UIImageView *)self.accessoryView).highlighted = highlighted; if( [[self.backgroundView class] isSubclassOfClass:[UIImageView class]] ) ((UIImageView *)self.backgroundView).highlighted = highlighted; self.textLabel.highlighted = highlighted; } @end 

一个音符,如果你走这条路线:分组表中的单元格通常是300像素宽(在肖像模式),但这里的普通表格将需要是302宽,以允许在表的每一边灰线,这是通常在表格单元格的“内容”之外。

花了一段时间后,颜色select器,我发现你需要指定不透明背景不是为表格视图单元格 xib,而是单元格将位于另一个xib 的表视图 。 从我所看到的,表格单元格背景属性没有视觉效果。

试试这个

 UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; backView.backgroundColor = [UIColor clearColor]; cell.backgroundView = backView; 

它在分组tableview中为我工作。

使UITableview背景为清晰的颜色。

以编程方式,您可以像这样做,如果您的图像被添加到您的资源:

 self.tableView.backgroundColor = [UIColor clearColor]; self.tableView.opaque = NO; UIImage *backroundImage = [UIImage imageNamed:@"my_backround"]; UIImageView *backroundImageView = [[UIImageView alloc] initWithImage:backroundImage]; 

否则你可以在Interface Builder中使用这种风格:

IB桌面与后面的图像

您可能需要将UITableViewController的头文件接口configuration为UIViewController,并添加<UITableViewDataSource,UITableViewDelegate> ,也不要忘记将tableview的属性设置为不透明,并将tableviews数据源和委托出口重新连接到viewcontroller。