iOS UIButton 总是透明的

Posted

技术标签:

【中文标题】iOS UIButton 总是透明的【英文标题】:iOS UIButton is always transparent 【发布时间】:2013-09-16 15:56:15 【问题描述】:

我在 iphone 应用程序中有一个自定义视图,当满足条件时,它应该使屏幕变暗并向用户显示一些输入字段。

我没有问题禁用主控件和“调暗”屏幕(只是一个 alpha=0.6 的 UIView),但是我在上面显示的控件似乎总是有一些透明度(我可以阅读一些文本通过 UIButton),即使我将控件的 alpha 设置为 1.0 并设置 opaque=YES。我什至尝试在按钮和覆盖层之间放置一个额外的不透明层,它仍然是部分透明的。

供参考:(ios 6.1)

UIView * overlay = [[UIView alloc] initWithFrame:parentView.frame];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha=0.6;

UIButton * button = [UIButton buttonWithType:UIButtonRoundedRect];
button.backgroundColor = [UIColor whiteColor];
button.alpha = 1.0;
button.opaque = YES;
[button setTitle:@"done" forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0,0.0,44.0,44.0)];

[overlay addSubview:button];
[parentView addSubview:overlay];

即使使用上面的代码,按钮也是透明的。有谁知道为什么以及如何使按钮不透明?

【问题讨论】:

你的意思是说你得到的按钮的 alpha 也是 0.6。我说得对吗? 【参考方案1】:

您可以部分看穿UIButton 的原因是因为它是覆盖UIView 的子视图,其alpha 为0.6。您需要执行以下操作:

// Create the overlay view just like you have it...
UIView *overlay = [[UIView alloc] initWithFrame:parentView.frame];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha = 0.6;

// Continue adding this to the parent view
[parentView addSubview:overlay];

// Create the button
UIButton *button = [UIButton buttonWithType:UIButtonRoundedRect];
button.backgroundColor = [UIColor whiteColor];
[button setTitle:@"Done" forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0, 0.0, 44.0, 44.0)];

// Add this button directly to the parent view
[parentView addSubview:button];

【讨论】:

谢谢,我很笨,一读就明白了。【参考方案2】:

我建议使用 opaque 功能,您将获得最佳实践:

使用 IB 使按钮不透明:选择所需按钮并在 Utilities 右侧栏转到 Attributes Inspector 并在 View 部分标记 Opaque 并且不要忘记更改背景。

之后,您必须以编程方式更改 UIButton 内标签的不透明:

yourButtonOutlet.titleLabel.opaque = true;
yourButtonOutlet.titleLabel.backgroundColor = [UIColor *YOUR DESIRED COLOR*];

了解apple 建议使用 opaque 以实现快速渲染。

【讨论】:

以上是关于iOS UIButton 总是透明的的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UIButton

IOS给UIButton添加阴影

具有突出显示不透明度和动画的圆形 UIButton

如何使 UIButton 与 UIScrollView 一起移动

UIButton 内的 UIImageView 具有默认填充 - 如何删除?

带有渐变、圆角、边框和阴影的 UIButton