将ImageView设置为分组的uitableview中的部分的背景

时间:2012-03-10 14:43:39

标签: iphone objective-c ios cocoa-touch uitableview

有没有办法在分组UIImageView中设置UITableView作为某个部分的背景(让我们说第3部分)? 我没有问过viewForHeaderInSection'因为我尝试了但是没有按预期工作。 非常感谢...

4 个答案:

答案 0 :(得分:2)

我的猜测是,如果你非常有创意地思考,你可以想出一种基本上交换UITableView的backgroundView属性的方法,因为不同的部分是可见的。考虑到多个部分可能同时占据可见屏幕,这并不会让我觉得特别优雅,但也许我不明白这个问题。

简短的回答是没有明确/简单的方法来实现这一目标。一个部分的组成远离UITableView的背景,基本上没有为你想要的设置架构。我不会假设知道您的实现细节,但我也要提醒:UITableView的视觉和架构特征都经过深思熟虑。我的个人意见(再次,我还没有看到你在做什么),在许多情况下,不同的部分背景可能会压倒用户体验。我还可以看到如果正确执行它可能是一个很好的UI触摸的情况。

在这种情况下,如果你仍然想要这样做,这就是我采取的方法:

基本上你会看到你的tableview细胞的位置。您可以在scrollViewDidScroll或tableViewWillDisplay单元格或其他地方执行此操作,我敢肯定。但是你需要知道哪些单元格在屏幕上滚动和离开,然后你需要能够向最上面可见的单元格询问它的部分是什么。一旦确定了当前应该显示的部分,就可以使用它来滚动表示每个部分背景的自己的视图集。

基本上,你将在代码中创建每个动态部分背景视图,只需要UIView,每个都将backgroundProperty设置为重复模式(显然,高度将是动态的)。将所有部分背景子视图(或者最好是懒惰地添加)添加到UITableView的backgroundView。

现在,当滚动视图滚动时,您将观察哪些行和部分进出表的视图。当滚动部分中的行时,计算部分背景的高度(将部分中的行数乘以它们的高度)并调整它的Y轴,它坐在但是被tableView的backgroundView剪切。当部分滚动时,您将更新相关部分的背景视图的Y偏移。呼!

另一个想法可能是将所有部分背景视图(垂直布局)放在UIScrollView中,禁用用户交互。将滚动视图放在表视图的backgroundView中,然后找出数学基本上“转发”滚动事件从tableview的滚动视图到背景滚动视图。

这可能需要花费一些工作才能找到让您的动画保持平滑和同步的实现,但是,这是一种我认为可以实现的方法。

答案 1 :(得分:0)

如果您的表只有一个部分,请使用myTable.tableHeaderView = customHeaderView

如果您未在方法中返回类型为viewForHeaderInSection的对象或子类,则

UIView可能无效。将viewForHeaderInSection方法中的一些代码添加到您的问题中,以获得更准确的答案。

编辑 - 如果按viewForHeaderInSection didn't work as expected表示标题已被剪裁,则可能是因为您尚未实施以下方法:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

如果没有实现,每个部分的高度都设置为iOS默认值。

答案 2 :(得分:0)

创建一个看起来像这样的自定义headerView。

·H

@interface CustomViewForHeader: UIView
@end

的.m

#import "CustomViewForHeader.h"
@implementation CustomViewForHeader

-(id)initWithFrame:(CGRect)frame {
   self = [super initWithFrame:frame];

if (self != nil) {
    UIImageView *bgImage = [[UIImageView alloc]initWithFrame:self.frame];
    bgImage.image = [UIImage imageNamed:@"bill_headerBg.png"];
    [self addSubview:bgImage];
}
return self;
}
@end

使用它像:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 50.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
   CustomViewForHeader *customView = [[CustomView alloc]initWithFrame:CGRectMake(0,0,320,50)]
    return customView;
}

答案 3 :(得分:0)

我记得有关找到每个部分的矩形的方法。有了这些,您可以将适当大小的图像放到表视图下面的滚动视图中。

除此之外,您可以将背景图像放入单元格本身的背景中。当tableview调用给定部分中的单元格时,您可以选择适当的图像或图像切片。