1

UIViewカテゴリで以下を使用して、UITableView(画面の3分の1を下からカバーします-添付のスクリーンショットを参照)に影を追加しました。

- (void) addShadow {
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];
    self.layer.masksToBounds = NO;
    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowOpacity = 1;
    self.layer.shadowOffset = CGSizeMake(-5,-5);
    self.layer.shadowRadius = 20;
    self.layer.shadowPath = path.CGPath;
    self.layer.shouldRasterize = YES;
}

期待通りに見えますが、上にスクロールすると影も上にスクロールします。また、テーブルは上限を超えてスクロールします。ここで何が悪いのか提案できますか?コメントself.layer.masksToBounds = NO;すると影は消えますが、テーブルのスクロールは期待通りです。したがって、問題はmasksToBoundsおそらくどこかにあります。

初期状態

スクロール状態

4

1 に答える 1

2

影だけのために、同じビューを下に置くことで解決しました。きれいな解決策ではありません...したがって、私はまだ答えを受け入れています。私のコードは次のとおりです。

- (UIView*) addShadow {
    UIView* backView = [[UIView alloc] initWithFrame:self.frame];
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:backView.bounds];
    backView.layer.masksToBounds = NO;
    backView.layer.shadowColor = [UIColor blackColor].CGColor;
    backView.layer.shadowOpacity = 1;
    backView.layer.shadowOffset = CGSizeMake(-5,-5);
    backView.layer.shadowRadius = 20;
    backView.layer.shadowPath = path.CGPath;
    backView.layer.shouldRasterize = YES;
    [self.superview addSubview:backView];
    [self.superview bringSubviewToFront:self];
    return backView;
}

  • (void) removeShadow { self.layer.masksToBounds = YES; self.layer.shadowColor = nil; self.layer.shadowOpacity = 0; self.layer.shadowOffset = CGSizeMake(0,0); self.layer.shadowRadius = 0; }
于 2013-03-11T00:43:47.287 に答える