如何在iOS中根据视图高度动态调整阴影?

3

我给带有圆角的视图添加了阴影,它起作用了。但是当视图的frame改变时,shadow不会根据视图改变大小。

我尝试了以下方法:

-(void)addShadow:(UIView *)view withCornerRad : (int)radius{
    view.clipsToBounds = YES;
    CALayer *ViewLayer = view.layer;
    [ViewLayer setMasksToBounds:NO ];
    ViewLayer.shadowColor = [UIColor lightGrayColor].CGColor;
    ViewLayer.shadowOpacity = 1.0 ;
    ViewLayer.shadowRadius = 2.0 ;
    ViewLayer.shadowOffset = CGSizeMake( 0 , 0 );
    ViewLayer.cornerRadius = radius;
    ViewLayer.shadowPath = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;
} 

enter image description here

enter image description here


每次更改视图框架时,您必须更新视图的阴影。 - Sunil Sharma
2个回答

8
根据苹果的编程指南,视图负责绘制内容、处理多点触控事件以及管理任何子视图的布局。
因此,您可以通过两种方式更改阴影: 1. 通过子类化UIView并覆盖layoutSubviews函数,在其中设置新的阴影大小。 2. 您可以重写控制器的viewDidLayoutSubviews()方法,在其中设置新的阴影大小。
祝好!

在这个解决方案中,阴影将会每次重新绘制。我也发现通过添加观察者你可以重新绘制阴影。self.container.addObserver(self, forKeyPath: "bounds", options: NSKeyValueObservingOptions.init(rawValue: 0), context: nil) - Shubham Daramwar
有没有自动处理阴影大小的解决方案? - Shubham Daramwar
-(void) viewDidLayoutSubview { [super viewDidLayoutSubviews]; [self addShadow:self.youView withCornerRad:5.0]; } - Eugene Svaro

0
-(void)addShadow:(UIView *)view withCornerRad : (int)radius
{
    view.clipsToBounds = YES;
    CALayer *ViewLayer = view.layer;
    ViewLayer.shadowColor = [UIColor lightGrayColor].CGColor;
    ViewLayer.shadowRadius  = 10;
    ViewLayer.shadowOffset  = CGSizeMake(0.0f, 0.0f);
    ViewLayer.shadowOpacity = 2;
    ViewLayer.masksToBounds = NO;

    UIEdgeInsets shadowInsets     = UIEdgeInsetsMake(0, 0, 0, 0);
    UIBezierPath *shadowPath      = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(view.bounds, shadowInsets)];
    ViewLayer.shadowPath    = shadowPath.CGPath;


}

如果你想让视图的顶部、左侧、底部和右侧都有阴影,可以尝试这个方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接