坚持某事,我不确定它是否可能。有没有办法将UITableView的背景设置为自定义图像,但不要让该背景应用于tableHeaderView。我的桌子上有一个标题需要保持透明,因为我有一个视差类型效果(如路径2应用程序),透明表格标题后面的图像实现了tableview的前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忽略它并透明? 谢谢大家,&万圣节快乐!
答案 0 :(得分:0)
是否有理由不能让tableHeaderView
成为您希望产生视差效果的图像的容器?
创建UIView
并将其粘贴为tableHeaderView
的{{1}},然后将UITableView
(或其他)添加到UIImageView
。使用tableHeaderView
的委托方法,您可以在其父视图中根据用户滚动重新定位此UIScrollView
。
请参阅此开源项目,了解路径启发的视差UIView
:RBParallaxTableViewController
答案 1 :(得分:0)
是的,你可以。我为分组UITableView
实现了视差效果的解决方案。您可以使用相同的方法,除了黑色背景(下面的示例),您可以使用您的图像。基本上,您在tableview后面有两个视图(清晰,标题视图背景清晰以及表视图背景本身)。基于滚动(UIScrollViewDelegate
)移动的这两个视图。你的tableview背景图片你将“滚动”1对1与表,而你的视差图像将以不同的速率“滚动”当然。在下面的示例中,我认为我的“_secondParaView
”将是您桌面的背景图片。
首先,在viewDidLoad中,创建一个视图以部分隐藏您的图像以获得视差效果,应该是与您想要的tableview相同的颜色,在我的情况下是blackColor。我根据图像的大小将视图放置在固定偏移处,您希望此视图的顶部与“section 0”标题视图末尾的顶部对齐。然后它将在桌面滚动时“滚动”。在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];
然后为标题视图/标题视图大小实现两个分组的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 parallax实现中一样,让你的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;
}
希望这会有所帮助,或者至少可以帮助某人为分组的桌面视图实现视差效果。我找不到解决办法。