6

我是 iPhone 开发的新手。

我知道可能有与我的问题相关的答案,但没有一个对我有帮助。

根据标题,我有 UITableView 样式分组。我想设置背景图像,但无法正确设置。

但问题是,正如我的截图中所描述的那样。

在此处输入图像描述

好吧,我只想显示由(分组)描述cells的图像视图区域UITableView

这是我的代码:

self.tblView = [[UITableView alloc]initWithFrame:CGRectMake(0, 125, 320, 320) style:UITableViewStyleGrouped];

    UIImageView *bgTableImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, 320, 320)];
    bgTableImageView.image = [UIImage imageNamed:@"bgImage.png"];

    self.tblView.backgroundColor=[UIColor clearColor];
    [self.tblView setBackgroundView:bgTableImageView];

    //self.tblView.backgroundView = nil;
   // self.tblView.opaque = NO;
    //self.tblView.bounces = NO;
    //self.tblView.scrollEnabled = YES;
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    self.tblView.separatorColor = [UIColor darkGrayColor];
    self.tblView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    [self.view addSubview:self.tblView];

所有其他工作正常且正确,我只有如何设置背景图像的问题UITableViewStyleGrouped

4

7 回答 7

4

尝试这个:

UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 277, 58)];
av.backgroundColor = [UIColor clearColor];
av.opaque = NO;
av.image = [UIImage imageNamed:@"categorytab1.png"];
cell.backgroundView = av;
于 2013-04-10T10:23:03.513 回答
3

首先,一些信息表是如何工作的:

  1. UITableView有背景。这就是你在细胞后面看到的。
  2. 每个单元格都有三个特殊视图:contentViewbackgroundViewselectedBackgroundView
  3. 显示在单元格内容的backgroundView下方,当单元格被选中时,selectedBackgroundView会被使用。
  4. 通常,您的所有内容都应该转到contentsView. 背景与内容的分离使表格能够正确地为未选择/选择的过渡设置动画。当单元格进入编辑模式时也很重要 - 内容被缩小/移动并且编辑控件(例如删除按钮或单元格选择)可以独立显示在内容上。
  5. 单元格还直接包含分隔视图(通常在单元格底部有 1 或 2px 高的视图,具体取决于separatorStyle)。这就是为什么单元格总是比它的contentsView.

其次,关于分组表如何工作的一些信息。

  1. 该表具有特殊的默认背景。您可以使用backgroundView和删除/更改它backgroundColor
  2. 分组表视图中的单元格具有较小的contentView. 该单元格的宽度仍与整个表格相同,但在contentView左侧和右侧有一个偏移量(在 iPhone 上大约为 10 个点)。
  3. backgroundView修改并包括绘制边界的图层,具体取决于单元格位置(第一个、最后一个和中间单元格不同)。边框具有表格指定的颜色separatorColor

一切都可以在您的代码中进行修改!

如何删除边框的最简单方法之一是设置separatorColor[UIColor clearColor]. 这将删除单元格分隔符,但您可以添加自己的分隔符,例如

cell = ...
UIView* separator = [[UIView alloc] init];
separator.backgroundColor = ...
separator.frame = CGRectMake(0.0f, table.bounds.size.width, table.rowHeight - 1.0f, 1.0f);
separator.autoresizingMask = (UIViewAutoresizingMaskFlexibleTopMargin | UIViewAutoresizingMaskFlexibleWidth);
[cell addSubview:separator]; //note we are adding it directly to the cell, not to contentsView

您还可以使用图像 ( UIImageView) 作为分隔符,而不是单色视图。

另一种方法是为每个单元格设置backgroundView为。nil

实际上,您可以完全忽略contentsView并直接将所有内容添加到单元格中。然后,您可以自定义以下单元格方法以在其状态更改时更新您的单元格。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    //update the cell text colors, backgrounds etc for the selected/not selected state
    //you don't have to call super
    // (the default implementation changes between backgroundView and selectedBackgroundView)
}

- (void)setHighlighted:(BOOL)highlited animated:(BOOL)animated {
    //update the cell text colors, backgrounds etc for the selected/not highlighted state
    //you don't have to call super
    // (the default implementation changes between backgroundView and selectedBackgroundView)
    //by giving empty implementation, you will block highlighting of cells
}

- (void)setEditing:(BOOL)highlited animated:(BOOL)animated {
  //you can use this method to add custom editing controls
}

- (void)willTransitionToState:(UITableViewCellStateMask)state {
  //use this method to change the layout of your contents
  //when the cells goes into one of the editing states
}

- (void)layoutSubviews {
  //update the frames of cell contents to match the new cell size
  //note that the cell doesn't have the correct size until it is added to the table,
  //this method is called when the cell already has the final size

  //you can also use this method to change the size/position of the `contentsView`
}

编辑: 为了解决您的具体问题,最好的解决方案可能是:

  1. 从表格中删除默认值backgroundView并补充您自己的背景(例如,清晰的颜色、白色、从图案创建的颜色或 aUIImageViewbackgroundView.
  2. 从每个单元格中删除默认值backgroundView并将其替换为UIImageView. 第一个、最后一个和中间单元格需要三个特殊图像。
于 2013-04-16T11:45:43.837 回答
3

使用以下代码 insatnd of use UIImageView

self.tblView.backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]];

否则,

self.tblView.backgroundView.inputView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tblbg.png"]];

第二个选项(当您不依赖Style,此选项很有用UITableView

1)改变你的UITableView风格, style:UITableViewStylePlain
2)添加#import <QuartzCore/QuartzCore.h>框架
3)改变框架UITableViewCGRectMake(10, "asYouNeed", 300, "asYouNeed")
4)给你的圆形半径UITableView

self.tblView.layer.cornerRadius = 10; // set Radius as you need

并设置UIImageViewBackGroundViewUITableView按照您在此问题中输入的代码

上述步骤是UITableView圆角创建的。在这里提到,当您不依赖UITableView样式时使用此代码,如果TableView Style:Gropped对您很重要,那么此选项对您没有帮助。

谢谢 :)

于 2013-04-10T09:51:03.667 回答
3

如果您想制作自定义单元格 UI,请尝试使用

 _tblNews.backgroundColor = [UIColor clearColor];
        _tblNews.backgroundView = nil;
        _tblNews.separatorColor = [UIColor clearColor];
        _tblNews.separatorStyle = UITableViewCellSeparatorStyleNone;

并为您的单元格创建 nib,因为您想要制作单元格并在数据源方法中加载该单元格。

用于加载 xib

+ (id)loadNibNamed:(NSString *)NibName {
    NSObject *cl = nil;
    if (NSClassFromString(NibName) != nil) {
        NSArray *arr = [[NSBundle mainBundle] loadNibNamed:NibName owner:self options:nil];
        for (id cls in arr) {
            if([cls isKindOfClass:NSClassFromString(NibName)])
            {
                cl = cls;
                break;
            }
        }
    }
    return cl;
}

确保在 xib 中为单元格的可重用性设置标识符。使用它,您可以轻松自定义单元格布局。

于 2013-04-19T06:03:07.207 回答
2

你想要这样吗

在此处输入图像描述

这是代码:-

在任何你想要的地方设置 UITableView 的背景视图。我已经在 viewDidload 中完成了。

[_tblView setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"url.jpg"]]];

并在 cellForRowAtIndexPath 中将 tableViewCellBackground 颜色设置为透明

    static NSString *cellIdentifier=@"cellIdentifier";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell ==nil) {
    cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.backgroundColor=[UIColor clearColor];
cell.textLabel.text=@"goup styled";
return cell;
于 2013-04-16T10:48:20.467 回答
2

UITableView背景视图设置为nil以使其透明。

[tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"backgroundImage.png"]]];
tableView.opaque = NO;
tableView.backgroundView = nil;

希望它会帮助你。

于 2013-04-16T10:29:43.890 回答
1

请试试这个,

UIView *backgroundView = [[UIView alloc] init];
[backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]];

并在表格视图中,请设置此属性。

UITableView *tableView = [[UITableView alloc] init];
[tableView setBackgroundView:backgroundView];

希望这对你有用。

于 2013-04-20T07:30:03.247 回答