带有圆角和阴影的UIBarButtonItem

9

我想在UIBarButtonItem上实现圆角和阴影效果。

UIButton *useButton = [UIButton buttonWithType:UIButtonTypeCustom];

然后我尝试设置阴影和圆角:

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;

最后,我创建了UIBarButtonItem

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

我的圆角没有出现,但我得到了阴影。

如果我添加:

useButton.clipsToBounds = YES;

And/or:

useButton.layer.masksToBounds = YES;

我想实现圆角效果,但是没有阴影。所以我尝试添加一个子层。

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];

它似乎无法工作,我看不到阴影。但我能得到圆角。

UIBarButtonItem/UIButton上既要实现圆角又要实现阴影,这是不可能的吗?

5个回答

10

尝试使用更新的代码:

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]];

自定义类型。它在问题中,代码的第一行。 - user89862
在我第一个版本的问题中,我忘记提到我使用按钮来创建UIBarButtonItem。也许这就是问题所在... - user89862
它能够工作,但是当我使用按钮创建UIBarButtonItem时就不行了。我忘记在第一个版本的问题中提到这一点了。 - user89862
@ Johannes,我已检查过了,它也在 UIBarButtonItem 上起作用。 - Mayur Prajapati
1
谢谢,我不确定我的错误在哪里,我把你的所有代码粘贴到一个新项目中,它在那里可以工作。所以我肯定是在我的项目中有其他错误 :) - user89862
1
我不明白这如何回答问题。如果将 masksToBounds 设置为 NO,则圆角半径将不再可见。 - shim

4
    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]];

谢谢。事实上,我正在将UIButton“包装”在UIBarButtonItem中,以设置导航栏中的右侧按钮项。 - user89862

0
btnname.layer.cornerRadius = 8.0;
btnname.layer.shadowOffset = CGSizeMake(2, 2);

-2
btn.layer.cornerRadius = 2.0 ;

-5
buttonName.layer.cornerRadius = 2;
buttonName.layer.borderWidth = 1;
buttonName.layer.borderColor = [UIColor blacColor].CGColor;

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