按钮中的图像未加载,我只得到一个蓝色方块

Posted

技术标签:

【中文标题】按钮中的图像未加载,我只得到一个蓝色方块【英文标题】:Image in button doesn't load, i only get a blue square 【发布时间】:2016-06-16 08:41:23 【问题描述】:

我正在尝试向屏幕添加一个按钮并以编程方式对其进行编辑,但大多数编辑都没有响应。

这是按钮代码:

@IBOutlet weak var buttonTest: UIButton!

let screen = UIScreen.mainScreen().bounds

let buttonImg = ResizeImage(UIImage(named: "Blokker")!, targetSize: CGSize(width: 50, height: 50))
    buttonTest.frame = CGRect(x: 0, y: screen.height - 300, width: screen.width * 0.5, height: screen.width * 0.5)
    buttonTest.setImage(buttonImg, forState: .Normal)
    buttonTest.setTitle("Test", forState: .Normal)
    buttonTest.imageView?.contentMode = .ScaleAspectFit
    view.addSubview(buttonTest)

ResizeImage 功能有效,我已经在其他视图控制器中使用过它。下面引用了此代码。 buttonTest.frame 方法不起作用,按钮将始终保持在同一个位置而无需编辑大小。图像也没有加载,在图像应该在的地方,我只能看到一个蓝色方块。

有谁知道如何解决这个问题?提前致谢!

ResizeImage 函数:

func ResizeImage(image: UIImage, targetSize: CGSize) -> UIImage 
    let size = image.size

    let widthRatio  = targetSize.width  / image.size.width
    let heightRatio = targetSize.height / image.size.height

    // Figure out what our orientation is, and use that to form the rectangle
    var newSize: CGSize
    if(widthRatio > heightRatio) 
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio)
     else 
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio)
    

    // This is the rect that we've calculated out and this is what is actually used below
    let rect = CGRectMake(0, 0, newSize.width, newSize.height)

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
    image.drawInRect(rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage

【问题讨论】:

试试 buttonTest.imageView?.imageRenderingMode = .AlwaysOriginal 这并没有直接工作,但我是这样使用的:let buttonImg = ResizeImage(UIImage(named: "Blokker")!, targetSize: CGSize(width: 50, height: 50)).imageWithRenderingMode(.AlwaysOriginal) 对框架问题有任何想法吗? 【参考方案1】:

我已经在评论中回答了你问题的第一部分

如果您希望图像与源相同,请使用imageView.imageRenderingMode = .AlwaysOriginal

imageView.imageRenderingMode = .AlwaysTemplate,如果您希望图像与其容器颜色相同(没有 Alpha 通道的图像将是彩色方块)

对于框架问题,你为什么是下面这行?删除它。

view.addSubview(buttonTest) 

Buttontest 已经有一个 superview,因为它是 storyboard/xib 的一个出口。此外,如果您使用故事板/xib 设计按钮,请不要更改框架矩形。您应该学习如何为此使用约束。

【讨论】:

【参考方案2】:

使用 FruitAddict 的评论:

let buttonImg = ResizeImage(UIImage(named: "Blokker")!, targetSize: CGSize(width: 50, height: 50)).imageWithRenderingMode(.AlwaysOriginal)

为遇到同样问题的人解决了图像问题!

框架问题至今没有改变..

【讨论】:

【参考方案3】:

根据我的说法,请使用 SDWebImage 第三方库,请点击以下链接:-

https://github.com/rs/SDWebImage

或者你也可以通过 pod 安装并使用这个库....

我用 swift 语言向你展示下面的代码:-

 let imageurl: NSURL? =  NSURL(string: "")

  imageview1.sd_setImageWithURL(url, placeholderImage:UIImage(named:"Ahmedabad_BRTS.jpg"))

【讨论】:

以上是关于按钮中的图像未加载,我只得到一个蓝色方块的主要内容,如果未能解决你的问题,请参考以下文章

swift UIImage蓝色方块

为啥我的 Swift 按钮在点击时会显示一个蓝色的小方块?

UIBarButtonItem 图像未显示,但显示为红色方块

Swift设置按钮图像

iOS自动布局未在底部固定空间显示按钮

图像未正确加载