如何在UIButton中拉伸图像

Nos*_*tap 54 cocoa uibutton ios

我正在尝试以编程方式创建自定义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];
Run Code Online (Sandbox Code Playgroud)

现在,图像会拉伸以填充整个按钮,而不是按比例缩放,以使其非常适合.

我也试过设置contentMode,UIViewContentModeScaleAspectFill但这似乎没有改变任何东西.事实上,没有一个不同的内容模式似乎改变了任何东西.

Rob*_*ods 64

你尝试过setImage而不是setBackgroundImage吗?


Dim*_*ris 48

确保该按钮是自定义UIButton

只是setImage:在iOS9上使用对我不起作用.

但它结合起来 myButton.imageView.contentMode = UIViewContentMode.ScaleAspectFit;

  • 谢谢!这对我也适用,在我看来,此属性未在IB中公开,因此我们必须在代码中手动设置它,而不是在IB中设置。在IB上,仅按钮本身具有内容模式设置,而不是其imageView。如果我错了,请纠正我。 (2认同)
  • 您在RainCast上就发现了-设置仅适合imageView的宽高比的唯一方法似乎是通过编程。 (2认同)

Bla*_*ank 37

在Swift ......

button.imageView?.contentMode = .aspectFit
Run Code Online (Sandbox Code Playgroud)

  • 现在是`button.imageView?.contentMode = .scaleAspectFit` (7认同)
  • 请记住,如果`yourButton.translatesAutoresizingMaskIntoConstraints = false`,则不会应用`.scaleAspectFit` (3认同)

dim*_*iax 28

故事板

物业形象.

您必须在定义特定属性运行属性身份检查 - imageView.contentMode,在那里你比较设定值rawValue枚举的位置UIViewContentMode.1表示scaleAspectFit.

在Storyboard中设置button.imageView.contentMode

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

完全对齐按钮

  • 这对我有用,但只有在我卸载并重新加载图像后 - 即从图像/背景图像字段中删除图像名称,然后再次添加它以重新加载. (4认同)

Abh*_*ain 9

Swift 4.2

myButton.imageView!.contentMode = .scaleAspectFit
Run Code Online (Sandbox Code Playgroud)

Swift早期版本

myButton.imageView!.contentMode = UIViewContentMode.scaleAspectFit
Run Code Online (Sandbox Code Playgroud)


J. *_*Doe 8

斯威夫特 4.X 和 5.X

button.imageView!.contentMode = .scaleAspectFit
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
Run Code Online (Sandbox Code Playgroud)