iOS UIButton图像contentMode在TouchUpInside上闪烁

Posted

技术标签:

【中文标题】iOS UIButton图像contentMode在TouchUpInside上闪烁【英文标题】:iOS UIButton image contentMode flickering on TouchUpInside 【发布时间】:2012-03-22 09:20:31 【问题描述】:

如果我将 UIButton 图像的 imageView contentMode 设置为 UIViewContentModeScaleAspectFill,我会遇到问题。

UIButton *imageButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
imageButton.imageView.contentMode = UIViewContentModeScaleAspectFill;
[imageButton setImage:[UIImage imageNamed:@"myImage.jpg"] forState:UIControlStateNormal];
[imageButton addTarget:self action:@selector(doSmth:) forControlEvents:UIControlEventTouchUpInside];

按钮内的图像已适当缩放以填充整个按钮区域。

点击/触摸按钮后,图像会调整大小(闪烁),就像它的 contentMode 设置为 UIViewContentModeScaleAspectFit

有谁知道在点击/触摸发生时如何消除这种闪烁?

谢谢!

【问题讨论】:

【参考方案1】:

为什么要设置按钮的 imageView 的内容模式?您为指定状态设置的图像始终填充按钮的大小。所以你必须将按钮的框架大小设置为图像的大小,而不是设置imageView contentMode

闪烁可能是按钮的高亮显示。如果要设置自定义图像以突出显示,请使用以下代码:

[imageButton setImage:buttonHightlightImage forState:UIControlStateHightlighted]

【讨论】:

所以为高亮状态设置相同的图像:) 如果你这样做,当你按下按钮时,你会看到没有交互 或者换个说法:我希望contentMode和button正常时一样。 是的,我只是将图像设置为突出显示状态(正常状态没有图像),并且图像仅在触摸发生时显示。之后我为两种状态设置图像并且没有闪烁。但我不认为这是一个好主意。按钮也失去了它的触摸动画...... 但您不需要设置 contentMode。您有大小为 100x50 像素的图像,因此请创建帧大小为 100x50 像素的按钮,并且不要设置 contentMode 您可以为突出显示的状态创建另一个图像,其中包括“触摸动画”【参考方案2】:

只需禁用/取消选中attributes inspector 中的highlighted adjusts image imageButton

【讨论】:

以上是关于iOS UIButton图像contentMode在TouchUpInside上闪烁的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 中图像的缩放类型或 contentMode 不起作用

UIButton 的 backgroundImage 的内容模式不受尊重

uibutton与图像

iOS UIViewContentMode详解

UIButton 内的 AspectFit 图像

在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果