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】:

您将您的问题标记为SwiftObjective-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

设置 UIButton 背景图像停止动画

为uibutton背景图像iphone sdk设置渐变颜色(颜色)

iOS UIButton在将背景图像设置为nil后消失

UIButton:为选中的高亮 UI 状态设置背景颜色(不是图像)