66

我正在尝试以编程方式创建一个自定义 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但这似乎并没有改变任何东西。事实上,不同的 contentMode 似乎都没有改变任何东西。

4

7 回答 7

68

你试过setImage代替setBackgroundImage吗?

于 2012-07-05T14:46:02.303 回答
56

确保按钮是自定义 UIButton

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

但它与myButton.imageView.contentMode = UIViewContentMode.ScaleAspectFit;

于 2016-01-28T23:54:31.167 回答
45

在斯威夫特...

button.imageView?.contentMode = . scaleAspectFit
于 2015-12-10T13:25:19.370 回答
36

故事板

物业形象。

您必须在身份检查器的Runtime Attributes –中定义特定属性,您可以在其中设置相对于enum 位置的值。1 表示scaleAspectFitimageView.contentModerawValueUIViewContentMode

在 Storyboard 中设置 button.imageView.contentMode

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

按钮完全对齐

于 2017-10-02T20:25:25.143 回答
9

斯威夫特 4.2

myButton.imageView!.contentMode = .scaleAspectFit

斯威夫特早期版本

myButton.imageView!.contentMode = UIViewContentMode.scaleAspectFit
于 2017-10-09T15:18:45.213 回答
8

斯威夫特 4.X 和 5.X

button.imageView!.contentMode = .scaleAspectFit
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
于 2019-05-25T17:29:42.510 回答
3

我认为你们错过了明显的问题。图片对于按钮来说太大了,iOS 必须猜测你想如何缩放它。确保您的图像尺寸合适,您不会遇到此问题。当然,这适用于您预先知道大小的静态图像和按钮,而不是动态内容。

于 2019-04-14T18:24:28.683 回答