UIView with rounded corners and drop shadow?

前端 未结 30 3213
一整个雨季
一整个雨季 2020-11-22 08:00

I’ve been working on an application for a couple of years and received a simple design request: Round the corners on a UIView and add a drop shadow.To do as given below.

30条回答
  •  天命终不由人
    2020-11-22 08:33

    The following worked best for me (this code lies in UIView extension, so self denotes some UIView to which we must add a shadow and round corner)

    - (void)addShadowViewWithCornerRadius:(CGFloat)radius {
    
    UIView *container = self.superview;
    
    if (!container) {
        return;
    }
    
    UIView *shadowView = [[UIView alloc] init];
    shadowView.translatesAutoresizingMaskIntoConstraints = NO;
    shadowView.backgroundColor = [UIColor lightGrayColor];
    shadowView.layer.cornerRadius = radius;
    shadowView.layer.masksToBounds = YES;
    
    [container addSubview:shadowView];
    [container bringSubviewToFront:shadowView];
    
    [container addConstraint:[NSLayoutConstraint constraintWithItem:shadowView
                                                          attribute:NSLayoutAttributeWidth
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self
                                                          attribute:NSLayoutAttributeWidth
                                                         multiplier:1.0
                                                           constant:0.0]];
    [container addConstraint:[NSLayoutConstraint constraintWithItem:shadowView
                                                          attribute:NSLayoutAttributeLeading
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self
                                                          attribute:NSLayoutAttributeLeading
                                                         multiplier:1.0
                                                           constant:2.0]];
    
    [container addConstraint:[NSLayoutConstraint constraintWithItem:shadowView
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self
                                                          attribute:NSLayoutAttributeHeight
                                                         multiplier:1.0
                                                           constant:0.0]];
    [container addConstraint:[NSLayoutConstraint constraintWithItem:shadowView
                                                          attribute:NSLayoutAttributeTop
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self
                                                          attribute:NSLayoutAttributeTop
                                                         multiplier:1.0
                                                           constant:2.0]];
    [container sendSubviewToBack:shadowView];
    }
    

    The main difference between this and other code samples is that this adds the shadow view as a sibling view (as against adding the current view as subview of shadow view), thereby eliminating the need to modify the existing view hierarchy in any way.

提交回复
热议问题