如何设置UITableView的背景(tableview样式为“Grouped”)才能使用图像?

时间:2009-05-21 20:10:07

标签: iphone

如何设置UITableView的背景(tableview样式为“Grouped”)才能使用图像?

11 个答案:

答案 0 :(得分:155)

在较新版本的SDK中,如果您希望它透明,则需要设置tableView.backgroundView,请尝试以下操作:

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

答案 1 :(得分:18)

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

  1. 准备PNG图像。它应该是320x460(如果您的应用程序中显示状态栏)或320x480(如果您隐藏它)。
  2. 将其拖入XCode并进入Resources文件夹并添加到您的项目
  3. 将包含UITableView的NIB文件加载到Interface Builder
  4. 打开库(Tools> Library),切换到Media选项卡,然后将图像拖到View中,创建一个新的UIImageView。
  5. 使用检查器移动图像并调整其大小,使其位于X = 0,Y = 0,宽度= 320,高度= 480
  6. 将UIImageView放在UITableView后面(布局>发送到后面)
  7. 保存,构建和开始!
  8. 令人失望的是,您将无法看到自己的背景。 UITableView的背景阻止我们看到UIImageView。您需要进行三项更改:

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

      tableView.backgroundColor = [UIColor clearColor];

    3. 我希望这有助于解决您的问题。它对我有用,我还没有找到一种更优雅的方式来显示UITableView的背景图像。

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

答案 2 :(得分:12)

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

答案 3 :(得分:9)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

在UI Builder中,背景颜色具有“其他”选项。 这会产生一个颜色选择器。 颜色选择器具有不透明度设置。 如果将“颜色”的“不透明度”设置为0,则无法正常工作。

答案 6 :(得分:1)

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

然而,这并没有解决当用户点击单元格并且“突出显示”时会发生什么 - 它会看起来正方形。您可以通过为伪造的表格单元格背景图像设置突出显示的图像来解决此问题。您还需要使用白色突出显示版本创建自己的公开附件视图(ImageView)。然后你可以创建一个我正在使用的单元格(如下)。在我分配其中一个单元格之后,我将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宽,以允许表格两侧的灰线,通常在表格单元格的“内容”之外。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

尝试这个

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

在分组的tableview中它对我有用。

答案 9 :(得分:0)

将UITableview背景设为清晰的颜色。

答案 10 :(得分:0)

如果您的图片已添加到资源中,则可以通过编程方式执行此操作:

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

否则,您可以使用以下样式在Interface Builder中执行此操作:

IB tableview with image behind

您可能需要将头文件界面从UITableViewController配置为UIViewController并添加<UITableViewDataSource,UITableViewDelegate>,同时不要忘记将tableview的属性设置为不透明,并将tableviews数据源和委托出口重新连接到视图控制器。