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 总是透明的的主要内容,如果未能解决你的问题,请参考以下文章
如何使 UIButton 与 UIScrollView 一起移动