Rap*_*eta 52 cocoa-touch uibutton uikit uiimageview ios
我正在为UIView分配一个UIButtonTypeCustom UIButton,其背景图像小于按钮的框架.图像较小的原因是因为我试图为UIButton添加更多的"目标区域".但是,图像被缩放到帧的完整大小,而不仅仅是图像的大小.
我已经尝试将UIButton和UIButton的imageView contentMode属性设置为"UIViewContentModeScaleAspectFit",但没有运气,图像仍然被拉伸.
有没有办法做我想以编程方式做的事情?
提前致谢!
mem*_*ons 124
很多人在按钮图像方面犯了同样的错误,然后跳过箍,试图使按钮按照他们的预期运行.让我们一劳永逸地清楚这一点:
A UIButton
可以显示两种类型的图像 - 前景图像和背景图像.预期按钮的背景图像将替换按钮的背景纹理.因此,有意义的是它伸展以填满整个背景.但是,按钮的前景图像应该是可以显示或不显示在文本旁边的图标; 它不会伸展.如果框架小于图像,它可能会缩小,但它不会拉伸.您甚至可以使用Interface Builder中的Control对齐属性设置前景图像的对齐方式.
可以在代码中设置按钮的前景和背景图像,如下所示:
// stretchy
[self setBackgroundImage:backgroundImage forState:UIControlStateNormal];
// not stretchy
[self setImage:forgroundImage forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
您无权访问后台imageView,但有完全可行的解决方法:
编辑:有一个更好的解决方法,然后我最初发布.您可以从任何颜色创建UIImage,然后调用-setBackgroundImage:forState.
请参阅bradley's
答案:https:
//stackoverflow.com/a/20303841/1147286
原始答案:
而不是调用-setBackgroundImage:forState:
,创建一个新的UIImageView并将其添加为按钮的子视图.
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:img];
bgImageView.contentMode = UIViewContentModeScaleAspectFit;
[bgImageView setFrame:CGRectMake(0, 0, videoButton.frame.size.width, videoButton.frame.size.height)];
bgImageView.tag = 99;
[yourButton addSubview:bgImageView];
[yourButton bringSubviewToFront:yourButton.imageView];
Run Code Online (Sandbox Code Playgroud)
当按钮需要旋转时,只需通过其标签找到imageView并重置其框架:
UIImageView *bgImageView = (UIImageView *)[button viewWithTag:99];
[bgImageView setFrame:CGRectMake(0, 0, newWidth, newHeight)];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42819 次 |
最近记录: |