UIBarButtonItem with rounded corners and shadow

12,099

Solution 1

Try this Updated code :

UIButton *useButton = [UIButton buttonWithType:UIButtonTypeCustom];
useButton.frame = CGRectMake(100, 430, 100, 40);
useButton.layer.masksToBounds = NO;
useButton.layer.cornerRadius = 10;
useButton.layer.shadowOffset = CGSizeMake(1.5, 1.5);
useButton.layer.shadowRadius = 0.5;
useButton.layer.shadowOpacity = 1.0;
useButton.layer.shadowColor = [UIColor blackColor].CGColor;
useButton.backgroundColor = [UIColor redColor];

UIBarButtonItem *useItem = [[UIBarButtonItem alloc] initWithCustomView:useButton];
[self.navigationItem setRightBarButtonItems:@[useItem]];

Solution 2

    UIButton *useButton = [UIButton buttonWithType:UIButtonTypeCustom];
    useButton.frame = CGRectMake(0, 0, 60, 30);
    useButton.backgroundColor = [UIColor redColor];
    useButton.layer.masksToBounds = NO;
    useButton.layer.cornerRadius = 4;
    useButton.layer.shadowOffset = CGSizeMake(0, 1.5);
    useButton.layer.shadowRadius = 5;
    useButton.layer.shadowOpacity = 1.0;
//    useButton.layer.shadowColor = [UIColor blackColor].CGColor;
    useButton.layer.borderColor = [UIColor blackColor].CGColor;
    [self.view addSubview:useButton];

    UIBarButtonItem *useItem = [[UIBarButtonItem alloc] initWithCustomView:useButton];
    [self.navigationItem setRightBarButtonItems:@[useItem]];

Solution 3

btnname.layer.cornerRadius = 8.0;
btnname.layer.shadowOffset = CGSizeMake(2, 2);
Share:
12,099
Johannes
Author by

Johannes

Updated on July 24, 2022

Comments

  • Johannes
    Johannes almost 2 years

    I want to have rounded corners and shadow on a UIBarButtonItem.

    UIButton *useButton = [UIButton buttonWithType:UIButtonTypeCustom];
    

    Then I try to set shadow and rounded corners:

    useButton.layer.masksToBounds = NO;
    useButton.layer.cornerRadius = 4;
    useButton.layer.shadowOffset = CGSizeMake(0, 1.5);
    useButton.layer.shadowRadius = 0.5;
    useButton.layer.shadowOpacity = 1.0;
    useButton.layer.shadowColor = [BSTCMColorUtility colorFromHexString:@"#AFAFAF"].CGColor;
    

    Finally I make the UIBarButtonItem:

    UIBarButtonItem *useItem = [[UIBarButtonItem alloc] initWithCustomView:useButton];
    [self.navigationItem setRightBarButtonItems:@[useItem]];
    

    I get no rounded corners, but I do get the shadow.

    If I add:

    useButton.clipsToBounds = YES;
    

    And/or:

    useButton.layer.masksToBounds = YES;
    

    I get rounded corners, but no shadow. So I thought that I would try to add a sublayer.

    CALayer *useButtonShadowLayer = [CALayer new];
    useButtonShadowLayer.frame = useButton.frame;
    useButtonShadowLayer.cornerRadius = 4;
    useButtonShadowLayer.backgroundColor = [UIColor whiteColor].CGColor;
    useButtonShadowLayer.shadowOffset = CGSizeMake(0, 1.5);
    useButtonShadowLayer.shadowRadius = 0.5;
    useButtonShadowLayer.shadowOpacity = 1.0;
    useButtonShadowLayer.shadowColor = [BSTCMColorUtility colorFromHexString:@"#AFAFAF"].CGColor;
    
    useButton.layer.cornerRadius = 4;
    useButton.layer.masksToBounds = YES;
    
    UIView *parent = useButton.superview;
    [parent.layer insertSublayer:useButtonShadowLayer below:useButton.layer];
    

    It doesn't seem to work, I see no shadow. I get rounded corners tho.

    Isn't possible to have rounded corners AND shadow on a UIBarButtonItem/UIButton?