UIButton:设置图像视图的背景(不设置图像)
Posted
技术标签:
【中文标题】UIButton:设置图像视图的背景(不设置图像)【英文标题】:UIButton: set background of image view (without setting an image) 【发布时间】:2017-11-07 09:11:36 【问题描述】:如何在不设置图像的情况下更改 UIButton 上图像视图的背景颜色? (例如,我在按钮文本旁边有一个红色方块)。
当我简单地设置mybutton.imageView.backgroundColor = UIColor.red
并将图像视图的约束设置为28x28px
。我没有看到红色方块。
谢谢。
澄清一下:我只想设置 UIButton 的图像视图的背景颜色 - 我不想为整个按钮着色!
【问题讨论】:
例如看到这个***.com/questions/41545599/… @Pascal 不是完美的解决方案,但您可以尝试在 UIView 中添加文本和图像,并在其上方添加一个空白 UIButton。 为按钮设置透明图像应该可以工作...... 【参考方案1】:您将您的问题标记为Swift
和Objective-C
,所以...
在 Swift 中,您可以使用此扩展程序创建具有特定颜色的“空白”图像:
public extension UIImage
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1))
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else return nil
self.init(cgImage: cgImage)
然后,在按钮文本旁边添加一个“红色方块”:
let btnImage = UIImage(color: .red, size: CGSize(width: 28, height: 28))
btn.setImage(btnImage, for: .normal)
如果你需要在 Obj-C 中这样做,它的过程是相同的:
- (UIImage *)imageWithColor:(UIColor *)color andSize:(CGSize)sz
CGRect rect = CGRectMake(0.0f, 0.0f, sz.width, sz.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
和
UIImage *btnImage = [self imageWithColor:[UIColor redColor] andSize:CGSizeMake(28.0, 28.0)];
[_btn setImage:btnImage forState:UIControlStateNormal];
注意:确保您的UIButton
类型设置为Custom
,否则图像将被“着色”。
【讨论】:
是的,我用两种语言对其进行了标记,因为很容易将一种语言翻译成另一种语言,而且我可以为其中任何一种语言提供答案 :) 感谢您的回复,看起来确实有没有设置图像就无法完成此操作,因此,在您的方法中使用 pseudo-image 似乎是最好的方法【参考方案2】:Use this code.
UIButton *button =[[UIButton alloc]initWithFrame:CGRectMake(85, 290,110,20)];
button.layer.cornerRadius = ROUND_BUTTON_WIDTH_HEIGHT/2.0f;
button.backgroundColor = [UIColor redColor];
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.font = [UIFont systemFontOfSize:11.0];
[button setTitle:@"Download" forState:UIControlStateNormal];
[button addTarget:self action:@selector(downloadBtnClicked:)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
【讨论】:
他要求更改 imageview 的背景颜色,而不是按钮。【参考方案3】:您应该制作自己的自定义 UIButton。另一种解决方案是尝试使用 IB 可用选项调整默认选项。
UIButton Image + Text ios
【讨论】:
【参考方案4】:UIButton *_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setFrame:CGRectMake(0.f, 0.f, 128.f, 128.f)]; // 设置你想要的值
[_button setCenter:CGPointMake(128.f, 128.f)]; // 设置你想要的值
[_button setClipsToBounds:false];
[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal]; // 为你的愿望设置图像名称
[_button setTitle:@"Button" forState:UIControlStateNormal];
[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];
[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // 设置你想要的颜色
[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // 设置你想要的颜色
[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, -110.f, 0.f)]; // 设置你想要的值
[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside]; // 你也可以将动作添加到按钮上
【讨论】:
以上是关于UIButton:设置图像视图的背景(不设置图像)的主要内容,如果未能解决你的问题,请参考以下文章
在 Interface Builder (XCode 4) 中设置 UIButton 拉伸背景图像
快速,旋转图像视图并将旋转的图像视图设置为 uibutton