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.imageView
与button
大小相同, 并具有所需的内容模式。
(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];