2

私は小さな iOS コンポーネントを開発していますが、サブビューを含む半透明のビューに問題があります。これは私のシナリオです: -
を使用した半透明の背景を持つ 1つ の ビュー[UIColor colorWithRed:green:blue:alpha]
UITableViewalpha = 1.0

すべて正常に動作しますが、 を上下にスクロールすると問題が発生しますUITableView。実際、 の周囲の半透明ビューの領域は透明度をUITableView失い、元の背景色よりも暗くなります。

問題を説明する画像は次のとおりです。

2 つの矢印があるスペースを見てください...

誰でもこの問題を解決できますか?
ご清聴ありがとうございました!

更新:
いくつかのコード:

_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: 私の Google クエストで、影に関するこの優れたブログ投稿を見つけました。役立つかもしれません。

于 2012-12-16T11:52:07.783 に答える
0

tableView の背景色を _alertBg に合わせてみませんか?

于 2012-12-12T21:35:56.070 に答える
0

の問題である可能性がありdequeueReusableCellWithIdentifierます。

これを試してみてください...、デリゲートメソッドのメソッドで次のように設定dequeueReusableCellWithIdentifierしますnilcellForRowAtIndexPathUITableViewController

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

また、私のこの回答を参照してください。これからいくつかのアイデアを得ることができます。

iPhone の Uitableview セルでラベルを非表示/表示する

于 2012-12-17T10:23:19.830 に答える