以下主题 scale Image in an UIButton to AspectFit?讨论了在缩放按钮时保留图像宽高比的几种方法。
事实上,当目标图像大小大于实际资源图像大小时,只有button.imageView!.contentMode = UIViewContentMode.ScaleAspectFit
才能完成工作。但是,如果资源图像大于目标,则ScaleAspectFit应用于图像,而imageView大小保持不变,图像两侧未使用的区域,因此文本没有空间。
在下面的代码中,我尝试手动缩放图像并为其指定按钮的imageView。然后,imageView大小也会更改以匹配图像的大小。我放置打印件以确保正确缩放图像,并接受新的帧大小。我禁用了#34; Autoresize subviews"对于按钮,但没有任何帮助:使用ScaleAspectFit仍然有空白点,没有 - 图像是"压扁":
let img = imageView.image!
var ivFrame = imageView.frame
println("Image view Frame Size Original: \(ivFrame.size.width)x\(ivFrame.size.height)")
let imgScaled = scaleImage(img,
CGSize(width: ivFrame.size.height, height: ivFrame.size.height))
imageView.image = imgScaled
let imageSize = imgScaled.size
println("Image Size Scaled: \(imageSize.width)x\(imageSize.height)");
imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
imageSize.width, imageSize.height)
ivFrame = imageView.frame;
println("Image view Frame Size New: \(ivFrame.size.width)x\(ivFrame.size.height)");
imageView.backgroundColor=UIColor.redColor() // to see image area
控制台输出:
Image view Frame Size Original: 90.0x39.0
Image Size Scaled: 39.0x39.0
Image view Frame Size New: 39.0x39.0
答案 0 :(得分:-1)
使用stackoverflow你经常会得到一个负面的标记,但通常是一个肯定的答案:)这就是我解决问题的方法。
将图像分配给button.imageView可能适用于常规按钮,但我的按钮是自定义按钮。我将button.setBackgroundImage
用于不同的控制状态,这可能会导致麻烦。正确的方法是使用button.setImage
而不是button.imageView.image
:
let targetSize = button.frame.size.height * 0.6
let imgScaled = scaleImage(button.imageView!.image!,
CGSize(width: targetSize, height: targetSize))
button.setImage(imgScaled, forState:UIControlState.Normal)
button.setImage(imgScaled, forState:UIControlState.Selected)
button.setImage(imgScaled, forState:UIControlState.Disabled)
仅仅为UIControlState.Normal
分配图片就足够了,我没有尝试过。但到目前为止还不错!