iOS >> UIButton ImageView属性>>如何设置内容模式?

有没有办法设置UIButton图像,BackgroundImage或ImageView属性内容模式属性?

我尝试了直接的方法(当然没用):

self.imageButton.imageView.contentMode = UIViewContentModeScaleAspectFit; 

有一个图像的button是很好的,但如果没有办法正确设置,它不是很方便…

使用自动布局的iOS7 / 8, button.imageView不会缩放button布局,例如iPhone 6:

 (lldb) po button <UIButton: 0x7fb4f501d7d0; frame = (0 0; 375 275); opaque = NO; autoresize = RM+BM; tag = 102; layer = <CALayer: 0x7fb4f501d160>> (lldb) po button.imageView <UIImageView: 0x7fb4f51d21f0; frame = (0 0; 0 0); clipsToBounds = YES; hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7fb4f5152860>> 

设置button的图像后, button.imageView假定图像的大小,例如一个320×240的图像:

 (lldb) po button.imageView <UIImageView: 0x7fb4f51d21f0; frame = (27.5 17.5; 320 240); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7fb4f5152860>> 

它看起来像button.imageView不尊重其内容模式,但实际上,这是问题的button.imageView的大小。

答案就是设置button的内容alignment方式。

下面设置button的图像,设置button.imageView的内容模式,并使button.imageView适合button的大小:

 [button setImage:image forState:UIControlStateNormal]; button.imageView.contentMode = UIViewContentModeScaleAspectFill; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; 

现在, button.imageViewbutton大小相同, 具有所需的内容模式。

 (lldb) po button.imageView <UIImageView: 0x7faac219a5c0; frame = (0 0; 375 275); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7faac219a6c0>> 

由此达到期望的结果。 非常便利!

如果你不想子类UIButton比你可以试试这个,

  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; for (UIView *view in button.subviews) { if ([view isKindOfClass:[UIImageView class]]) { [view setContentMode:UIViewContentModeScaleAspectFit]; } } 

每个UIButton都有一个隐藏的UIImageView。 所以我们必须像下面给出的方式设置内容模式…

 [[btn imageView] setContentMode: UIViewContentModeScaleAspectFit];