2

我正在开发一个小的 iOS 组件,但我遇到了带有子视图的半透明视图的问题。这是我的场景:
- 一个带有半透明背景的视图,使用[UIColor colorWithRed:green:blue:alpha]
- 一点点UITableView, with alpha = 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]

4

3 回答 3

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:在我的谷歌搜索中,我发现了这篇关于阴影的优秀博客文章,它可能会有所帮助。

于 2012-12-16T11:52:07.783 回答
0

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

于 2012-12-12T21:35:56.070 回答
0

它可能是dequeueReusableCellWithIdentifier.

试试这个......,在委托方法的方法中设置dequeueReusableCellWithIdentifiernil如下所示cellForRowAtIndexPathUITableViewController

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

另请参阅我的这个答案可能是你可以从中得到一些想法..

iPhone在Uitableview单元格中隐藏/显示标签

于 2012-12-17T10:23:19.830 回答