tableView作为半透明视图中的子视图

时间:2012-12-12 19:13:47

标签: iphone uitableview view subview alpha

我正在开发一个小的iOS组件,我有一个带有子视图的半透明视图的问题。这是我的情景:
- 使用[UIColor colorWithRed:green:blue:alpha]的半透明背景的一个视图 - 将UITableViewalpha = 1.0一起添加为半透明视图的子视图 - 其他一些子视图

一切运作良好但问题在UITableView向上或向下滚动时提升,实际上UITableView周围半透明视图区域的透明度变得比原始背景颜色更暗。

这是解释问题的图像:

用两个箭头看空间......

任何人都可以帮我解决这个问题吗? 非常感谢你的关注!

更新
一些代码:

_alertBg = [[UIView alloc] initWithFrame:CGRectZero];
_alertBg.backgroundColor = self.backgroundColor;
_alertBg.frame = CGRectMake((_bgView.frame.size.width - 240) / 2, (_bgView.frame.size.height - 260) / 2, 240, 260);
_alertBg.layer.cornerRadius = 8.0;
_alertBg.layer.borderWidth = 2.0;
_alertBg.layer.borderColor = self.borderColor.CGColor;
_alertBg.layer.shadowColor = [UIColor grayColor].CGColor;
_alertBg.layer.shadowOffset = CGSizeMake(0, 3);
_alertBg.layer.shadowOpacity = 0.8;
_alertBg.layer.masksToBounds = YES;
[_bgView addSubview:_alertBg];

_table = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_table.frame = CGRectMake(10, _titleLabel.frame.origin.y + _titleLabel.frame.size.height + 12, _alertBg.frame.size.width - 20, 150);
_table.layer.cornerRadius = 6.0;
_table.layer.masksToBounds = YES;
_table.delegate = self;
_table.dataSource = self;
[_alertBg addSubview:_table];

从上面的代码中,self.backgroundColor类似于[UIColor colorWithRed:0 green:0 blue:1 alpha:0.7]

3 个答案:

答案 0 :(得分:1)

我将可用代码放在测试项目中,并且遇到了与您相同的问题。评论_alertBg.layer.shadowOpacity = 0.5;可以解决我的问题。也许有人可以澄清为什么这是一个问题,我对QuartzCore的经验有限。

编辑:好的,接近​​真正的原因。似乎如果你没有设置_alertBg.layer.shadowPath属性,当你滚动表时会发生各种疯狂的事情(我的猜测是表滚动调用_alertBg的重绘和阴影重绘快速连续调用很多次,你得到那些视觉文物。)

添加shadowPath可解决问题,因此_alertBg的图层代码应如下所示:

_alertBg.layer.cornerRadius = 8.0;
_alertBg.layer.borderWidth = 2.0;
_alertBg.layer.borderColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:0.7].CGColor;
_alertBg.layer.shadowColor = [UIColor grayColor].CGColor;
_alertBg.layer.shadowOffset = CGSizeMake(0, 5);
_alertBg.layer.shadowOpacity = 0.8;
_alertBg.layer.shadowPath = [UIBezierPath bezierPathWithRect:_alertBg.bounds].CGPath;
_alertBg.layer.masksToBounds = YES;

只需根据自己的喜好修复shadowPath即可。您应该准备好了。

PS:在我的Google任务中,我发现this excellent blog post关于阴影,它可能会有所帮助。

答案 1 :(得分:0)

也许将tableView的背景颜色与_alertBg匹配?

答案 2 :(得分:0)

它可能是dequeueReusableCellWithIdentifier的问题。

试试这个......,将dequeueReusableCellWithIdentifier设置为nil,如同cellForRowAtIndexPath委托方法的UITableViewController方法

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

另见我的答案可能是你可以从中得到一些想法..

iPhone Hide/Show labels in Uitableview cell