Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UIButton中不拉伸图像_Ios_Cocoa_Uibutton - Fatal编程技术网

Ios 如何在UIButton中不拉伸图像

Ios 如何在UIButton中不拉伸图像,ios,cocoa,uibutton,Ios,Cocoa,Uibutton,我试图以编程方式创建一个自定义UITableViewCell,该单元格的一个子视图将是一个按钮,其中包含一个图像(一个简单的放大镜图像)。但是,我希望按钮的图像居中并按比例缩小以适合按钮,而不是拉伸以填充整个按钮。下面是我的代码,self指的是我将按钮放入其中的自定义UITableViewCell self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [self.myButton setBackgroundImage

我试图以编程方式创建一个自定义UITableViewCell,该单元格的一个子视图将是一个按钮,其中包含一个图像(一个简单的放大镜图像)。但是,我希望按钮的图像居中并按比例缩小以适合按钮,而不是拉伸以填充整个按钮。下面是我的代码,self指的是我将按钮放入其中的自定义UITableViewCell

self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.myButton setBackgroundImage:[UIImage imageNamed: @image_name_here"] forState:UIControlStateNormal];
self.myButton.frame = CGRectMake(...//something, something)
self.myButton.imageView.contentMode = UIViewContentModeCenter;
[self.contentView addSubview:self.mySearchHelpButton];
现在,图像拉伸以填充整个按钮,而不是按比例缩放以使其非常适合


我还尝试将contentMode设置为
UIViewContentModeScaleAspectFill
,但这似乎没有改变任何事情。事实上,所有不同的内容模式似乎都没有改变任何东西

您是否尝试过用
setImage
代替
setBackgroundImage

在Swift中

button.imageView?.contentMode = . scaleAspectFit

确保该按钮是自定义UIButton

仅使用
setImage:
在iOS9上对我不起作用

但它与myButton.imageView.contentMode=UIViewContentMode.ScaleSpectFit结合使用

情节提要 属性图像

您必须在标识检查器的运行时属性中定义特定属性
imageView.contentMode
,在该属性中,您可以设置相对于枚举
UIViewContentMode
位置的值。1表示scaleSpectFit

和按钮对齐,在属性检查器中:


Swift 4.2

myButton.imageView!.contentMode = .scaleAspectFit
Swift早期版本

myButton.imageView!.contentMode = UIViewContentMode.scaleAspectFit

我想你们错过了一个明显的问题。图像对于按钮来说太大了,iOS必须猜测您想要如何缩放它。确保您的图像大小正确,这样您就不会出现此问题。当然,这是针对静态图像和按钮的,您知道这些图像和按钮的大小,而不是动态内容。

Swift 4.X和5.X

button.imageView!.contentMode = .scaleAspectFit
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill

谢谢这也适用于我,在我看来,这个属性没有在IB中公开,因此我们必须在代码中手动设置它,而不是从IB。在IB上,按钮本身只有一个内容模式设置,而不是它的imageView。如果我错了,请纠正我。您是RainCast上的spot-为imageView设置方面的唯一方法似乎是通过编程。谢谢您,您的指南对我帮助很大。你能给我简单解释一下你到底在做什么吗?多谢各位much@nedaDerakhshesh你能说得更具体些吗?谢谢。这是scaleAspectFit枚举(case scaleAspectFit=1)的原始值。这对我有效,但只有在我卸载并重新加载图像后-即从图像/背景图像字段中删除图像名称,然后再次添加以重新加载。你救了我一天!现在是
button.imageView?.contentMode=.scalespectfit
请记住,如果
yourButton.translates自动调整大小gmaskintoconstraints=false
则将不应用
.scalespectfit
,正常按钮的合适大小是什么?小于按钮本身的宽度和高度?或者它是如何计算的?@tyoc213,大小应该正好是你想要的按钮的点大小,宽度和高度。例如,如果您想要一个44像素x 100像素的按钮,图像资源应该是44x100像素@1x,88x200像素@2x,132x300像素@3x。这样,auto layout knows可以使用图像作为按钮的固有大小。