如果我理解的话,您需要一个完全清晰的 tableview 和 tableview 单元格,这样您就可以看到视图控制器的背景。
您可以通过将 tableview 设置为没有背景来实现这一点
tableview.backgroundColor = [UIColor clearColor];
tableView.opaque = NO;
tableView.backgroundView = nil;
还有细胞
cell.backgroundColor = [UIColor clearColor]
如果你还希望部分是透明的,你可以使用这个方法:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
制作自定义视图(例如创建一个带有透明 .png 作为背景的图像视图)
希望我能正确理解您的问题。
澄清后编辑
显示单元格在进入节标题下方之前停止:
用这个 ivar 创建一个作为 uitableview 子类的类:
@interface CustomTableView : UITableView
{
CAGradientLayer* maskLayer;
}
显然这将创建一个渐变,但如果您愿意,您可以调整它或使用CALayer,而不是以编程方式创建蒙版,而是创建一个具有正确宽度/高度的节标题的 .png。
无论如何:如果您使用CAGradientLayer:
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self)
{
[self setupGradients]; //call your method
}
return self;
}
- (void)setupGradients
{
[self addObserver:self forKeyPath:@"contentOffset" options:0 context:nil];
*/ ***** if you choose to use CALayer instead of CAGradient ****** */
//maskLayer = [[CALayer layer] retain];
//maskLayer.contents = (id) [UIImage imageNamed:@"maskLayer.png"].CGImage;
//maskLayer.backgroundColor = [UIColor clearColor].CGColor;
*/ ***** if you choose to use CALayer instead of CAGradient ****** */
maskLayer = [[CAGradientLayer layer] retain];
CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;
CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor;
maskLayer.colors = [NSArray arrayWithObjects:(id)outerColor,
(id)innerColor, (id)innerColor, (id)outerColor, nil];
maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0], nil]; //this creates a gradient effect. Tweak these numbers for a hard line.
maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
maskLayer.anchorPoint = CGPointZero;
self.layer.mask = maskLayer;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
[CATransaction begin];
[CATransaction setDisableActions:YES];
maskLayer.position = CGPointMake(0, self.contentOffset.y);
[CATransaction commit];
}
然后在您的视图控制器中:
CustomTableView *_tableView; //ivar
_tableView = [[CustomTableView alloc] initWithFrame:YOUR_FRAME];
基本思想是遮罩,您在表格视图的顶部创建一个遮罩形状,该形状与您的节标题大小相同。看起来它后面的单元格“消失”了。这有点棘手,但它会起作用。