2

坚持某事,我不确定它是否可能。有没有办法将 UITableView 的背景设置为自定义图像,但不要让该背景应用于 tableHeaderView。我的桌子上有一个需要保持透明的标题,因为我有一个视差类型效果(如路径 2 应用程序),它使用透明表格标题和表格视图顶部 1/3 后面的图像实现...但我需要在桌子的其余部分后面获取自定义图像。

我可以成功接近我正在寻找的填充每个单元格后面的背景样式,其中:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

但是,这不是我要找的,因为我想要屏幕上整个 tableview 后面的径向渐变背景视图,减去透明标题......不仅仅是每个单元格的相同图像。此外,这种方法确实影响了我的 tableview 的滚动性能,为每个单元格加载了一个新的 BG 图像。

我知道你可以使用:

  UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
  [tempImageView setFrame:self.tableView.frame];

  self.tableView.backgroundView = tempImageView;

为 tableview 设置 BG 图像,它真的很接近我想要做的,但我需要那个标题是透明的。有什么办法可以使用它,而且还告诉tableHeaderView忽略它并保持透明?谢谢大家,万圣节快乐!

4

2 回答 2

0

您是否有理由不能tableHeaderView成为您希望具有视差类型效果的图像的容器?

创建一个UIView并将其粘贴为 的tableHeaderViewUITableView然后将您的UIImageView(或其他)添加到该tableHeaderView。使用UIScrollView的委托方法,您将能够UIView根据用户滚动在其父视图中随意重新定位它。

请参阅此开源项目以获取受路径启发的视差UITableViewRBParallaxTableViewController

于 2012-11-01T00:44:37.437 回答
0

是的你可以。我为分组的视差效果实现了一个解决方案UITableView。您可以使用相同的方法,除了可以使用您的图像而不是黑色背景(下面的示例)。本质上,您在 tableview 后面有两个视图(很清晰,标题视图背景清晰以及表格视图背景本身)。您基于滚动 ( UIScrollViewDelegate) 移动这两个视图。您的表格视图背景图像将与表格以一对一的方式“滚动”,而视差图像当然将以不同的速度“滚动”。在下面的示例中,我认为我的“ _secondParaView”将是表格的背景图像。

首先,在 viewDidLoad 中,创建一个视图以部分隐藏您的图像以获得视差效果,应该与您希望 tableview 的背景颜色相同,在我的情况下为 blackColor。我根据图像的大小将视图放置在固定偏移处,您希望此视图的顶部与“第 0 节”标题视图的末端顶部对齐。然后它会在 tableview 滚动时“滚动”。将此视图插入到 tableview 下方。

_secondParaView = [[UIView alloc] initWithFrame: CGRectMake(0.0, kTableViewOffset, self.view.frame.size.width, 200.0)];
_secondParaView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 0.0 alpha: 1.0];
[self.view insertSubview: _secondParaView belowSubview: _tableView];

_headerImageYOffset = -40.0;
_headerImageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SpaceRedPlanet640x480.png"]];
CGRect headerImageFrame = _headerImageView.frame;
headerImageFrame.origin.y = _headerImageYOffset;
_headerImageView.frame = headerImageFrame;
[self.view insertSubview: _headerImageView belowSubview: _secondParaView];
_tableView.backgroundColor = [UIColor clearColor];

然后实现header view/header view size的两个分组tableview方法:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        UIView * tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, self.view.frame.size.width, kTableViewOffset)];
        tableHeaderView.backgroundColor = [UIColor clearColor];     
        return tableHeaderView;
    } else
        return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return kTableViewOffset;
    } else 
        return 2;
}

就像在“正常”的 tableview 视差实现中一样,让你的 VC 成为 UIScrollViewDelegate 并像这样实现这个 scrollViewDidScroll:

#pragma mark -
#pragma mark UIScrollViewDelegate methods
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat scrollOffset = scrollView.contentOffset.y;
    CGRect headerImageFrame = _headerImageView.frame;
    CGRect underParaFrame = _secondParaView.frame;

    if (scrollOffset < 0) {
        // Adjust top image proportionally
        headerImageFrame.origin.y = _headerImageYOffset - ((scrollOffset / 3));
    } else {
        // We're scrolling up, return to normal behavior
        headerImageFrame.origin.y = _headerImageYOffset - scrollOffset;
    }
    underParaFrame.origin.y = kTableViewOffset - scrollOffset;
    _headerImageView.frame = headerImageFrame;
    _secondParaView.frame = underParaFrame;
}

希望这会有所帮助,或者至少可以帮助某人实现分组表视图的视差效果。我找不到解决办法。

于 2013-01-23T03:34:57.800 回答