首页 文章

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

提问于
浏览
10

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

我尝试过直接的方法(它当然不起作用......):

self.imageButton.imageView.contentMode = UIViewContentModeScaleAspectFit;

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

3 回答

  • 2

    使用具有自动布局的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 假设图像的大小,例如对于320x240图像:

    (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 的大小 .

    The answer is to set button's content alignment as well.

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

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

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

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

    由此实现期望的结果 . 非常便利!

  • 28

    如果你不想继承UIButton,那么你可以试试这个,

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

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

    [[btn imageView] setContentMode: UIViewContentModeScaleAspectFit];
    

相关问题