4

在此处输入图像描述我们可以为UITableViewSection设置背景图像吗UITableViewCell backGroundView?根据我的研究,这是不可能的,我们需要自定义行的部分。
甘蔗除此之外我们还能够得到更好的解决方案。

提前致谢!

4

6 回答 6

3

如果有人仍然感兴趣,实际上有一个非常直接的解决方案。UITableView 将使用选择器 rectForSection 告诉您每个部分的框架:

为每个部分添加背景图像将如下所示(在视图控制器中的某处):

  for(int i = 0;i < [self numberOfSectionsInTableView:self.tableView]; i++) {
        UIImage *img = [[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(30.0, 30.0, 40.0, 40.0) ]; //In this example the image is stretchable
        UIView *borderView = [[UIImageView alloc] initWithImage:img];
        CGRect section_rect = [self.tableView rectForSection:i];
        borderView.frame = section_rect;
        [self.tableView addSubview:borderView];
    }

请记住,如果您在 tableview 中重新加载数据,您也必须重做。

于 2015-05-14T13:48:00.687 回答
1

是的,我正在按照以下方式执行此操作,我认为它也适用于您,....

        -(void)addBackgroundViewForSectionIndex:(int)tagIndex {

           for (UIView * subview in tableView.subviews) {
             if(subview.tag == tagIndex)
               [subview removeFromSuperview];
           }

          CGRect sectionFrame = [tableView rectForSection:tagIndex];
          UIImageView *newView = [[UIImageView alloc]initWithFrame:sectionFrame];
          newView.tag = tagIndex;
          [newView setImage:[UIImage imageNamed:@"image.PNG"]];
          [tableView addSubview:newView];
          [tableView sendSubviewToBack:newView];

        }

      // Customize the appearance of table view cells.

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

           static NSString *CellIdentifier = @"Cell";

         UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];
          if (cell == nil) {
                  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
                           }

                 cell.textLabel.text = [collection objectAtIndex:indexPath.row];


             [self addBackgroundViewForSectionIndex:indexPath.section];

                return cell;
             }

如果有任何问题,请告诉我,... :)

于 2013-02-13T13:17:13.683 回答
1

不,这不可能UITableView按预期使用。正如其他人所建议的那样,节标题将不起作用,因为它们仅在标题可见时才可见。只要它在向上滚动时消失,背景图像就会消失。

您的两个选择是:

  • 直接将UIImageView实例作为子视图添加到表视图。不好玩,因为您必须手动调整它们的大小和位置,这很难做到。
  • Use UICollectionView,它支持装饰视图(正是您要寻找的)。

UICollectionView方法可能更好,但老实说,任何一种选择都需要大量工作。

于 2013-02-13T14:36:24.303 回答
1

Jesper答案的 Swift 5 基本实现。

for sectionIndex in 0..<tableView.numberOfSections {
    let backgroundView = UIView() // replace UIView with anything else you want, whether it was UIImage, nibView, etc...
    backgroundView.frame = tableView.rect(forSection: sectionIndex)
    tableView.addSubview(backgroundView)
}
于 2019-07-13T16:53:22.127 回答
-1

您可以为 TableView 的部分设置背景。

看看委托方法如下:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{
    UIImageView *bgImgView = [[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,tableView.bounds.size.width,40.0)] autorelease];
    bgImgView.image = [UIImage imageNamed:@"yourimage.jpg"];

    return bgImgView;
}

希望这对您有所帮助。

干杯!

于 2013-02-08T12:47:07.957 回答
-1
table= [[UITableView alloc] initWithFrame:CGRectMake(7,0, 307, 124) style:UITableViewStylePlain];

[table  setSeparatorStyle:UITableViewCellSeparatorStyleNone];

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tablebg_pt12.png"]];

imageView.frame=CGRectMake(0, 0, 307, 124);

imageView.image= [UIImage  imageNamed:@"tablebg_pt12.png" ];


    table.backgroundView = imageView;
    [imageView release];


    table.delegate = self;
    table.dataSource = self;

    // table.backgroundColor=[UIColor clearColor];
    [viewTable addSubview:table];
于 2013-02-13T14:15:52.147 回答