UIButton 的 backgroundImage 和 image 的填充模式

原创   2016年09月01日 15:35:04
  • 标签:
  • uibutton /
  • contentMod
  • 3196

UIButton 的 backgroundImage 和 image 的填充模式

在将 UIButton 当做图标按钮使用时,可以有两种方式给它设置一张图片:setBackgroundImage:forState: 和 setImage:forState:。用这两种方式都可以把 UIButton 作为图片按钮使用,这在图片背景的比例和UIButton 的宽高比例相同时是没什么问题的,图片都不会因为被拉伸或者缩放而出现失真。但是当图片的比例和 Button 的尺寸比例不一样时,这两种方式设置图片的效果就不一样了,拿下图的例子来说: 
 
图中 viewController 里 两个 UIButton 的大小都是 100x200,第一个是通过 setImage:forState设置图片,第二个是通过setBackgroundImage:forState:设置图片,这张图片的尺寸是 300x428,也就是 Button 和图片的比例不一致。 
 
这时我们不做任何设置,直接运行的话,两个Button的图片都会被拉伸: 

这样的效果肯定不是我们想要的,对于setImage:forState:设置的图片可以给 UIButton 的 imageView设置对应的填充属性来解决缩放问题,注意不是直接设置 UIButton 的 contentMode,setImage:forState: 会将 image 设置到 UIButton 中的 ImageView 图层,直接设置 UIButton 的 contentMode 是不起作用的。对于用 setBackgroundImage:forState: 方式设置的图片,无论怎么设置都不会有效果,这种方式会直接将图片拉伸至 Button 的边界,来填充满整个 Button。所以如果 图片和 Button的比例不一致时,只能使用 setImage:forState: 这种方式来保证图片不被压缩。 
但是,当 Button 的大小超过了图片的原始大小,并且比例也不一样时,这时候 Button 四周就可能会出现图片覆盖不上的空白,例如,现在将上面图中 第一个 Button 的宽度拉大,为了看出效果,这里还为 Button 设置了一个背景颜色: 

并且在 viewDidLoad 里加上这一句代码设置图片的填充模式 button1.imageView?.contentMode = .ScaleAspectFill,再运行看一下效果: 

可以发现,设置 button1.imageView?.contentMode = .ScaleAspectFill 的确会让图片不再变形,但是也只是按图片的原始尺寸显示了,两边的留白也是很不美观的。当然,这也是有解决办法的,UIControl 里提供了两个属性:contentHorizontalAlignment 和 contentVerticalAlignment 分别用来设置水平和竖直方向上内容的对齐方式,把 button1 的 contentHorizontalAlignment 设置为 Fill 就可以解决上面的问题,如果是竖直方向无法填满的话,设置 contentVerticalAlignment 就行了,最后来看一下最终的效果: 

/

UIButton 设置图片显示 contentmode

原创   2015年11月17日 11:22:31
  • 标签:
  • UIButton contentMode
  • 3484

UIButton 设置图片显示contentmode

只设置contentmode是没有效果的

UIButton *button;

button.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);

[[button imageView] setContentMode:UIViewContentModeScaleAspectFill];

button.contentHorizontalAlignment= UIControlContentHorizontalAlignmentFill;//水平方向拉伸

button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;//垂直方向拉伸

UIButton 的 backgroundImage 和 image 的填充模式相关推荐

  1. 对称加密、工作模式和填充模式

    对称加密密钥长度分析 DES秘钥长度:8个字符 AES秘钥长度:16个字符 DES加密后密文长度是8的整数倍 AES加密后密文长度是16的整数倍 工作模式和填充模式 IOS加密,android没有解密 ...

  2. 加密模式||填充模式

    加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codeboo ...

  3. RSA加密的填充模式

    http://blog.chinaunix.net/uid-21880738-id-1813144.html 跟DES,AES一样, RSA也是一个块加密算法( block cipher algori ...

  4. opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及卷积填充模式

    具体参考我的另一篇文章: opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及Same(相同)填充与Vaild(有效)填充 这里是对这一篇文章的补充! 卷积-三种填充模式 橙色部分为imag ...

  5. 密码学常用的算法填充模式_密码学的操作模式

    密码学常用的算法填充模式 Modes of operation of a block cipher are procedural rules for a generic block cipher. T ...

  6. rsa 公 填充模式的_RSA加密的填充模式

    跟DES,AES一样, RSA也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作. 但跟AES等不同的是, block length是跟key le ...

  7. rsa 公 填充模式的_RSA中pkcs1的填充方法具体是什么?

    展开全部 1)RSA_PKCS1_PADDING 填充模式,最常用的模式 要求: 输入 必须32313133353236313431303231363533e4b893e5b19e3133326235 ...

  8. MFC之学习多边形绘制、阴影模式、多边形填充模式与绘制实心五角星

    1.笔记 1.1绘制多边形函数 BOOL CDC::Polygon(LPPOINT lpPoints,int nCount); lpPoints是多边形顶点数组名,数组中每个点是CPoint对象(或称 ...

  9. egret之纹理填充模式(上下填充)

    首先,我们准备两张图片,一张作为背景"瓶子",一张作位填充物"饮料". 在皮肤里我们设置右边图片的填充模式为"repeat",修改Y的缩放为 ...

最新文章

  1. ERROR: from PIL import Image ImportError: No module named PIL
  2. php中this,self,parent三个关键字之间的区别(转载)
  3. 验算神经网络谐振子模型的第二组数据
  4. UINavigationController使用的一些技巧
  5. Comparator 与 Comparable
  6. xp故障恢复控制台和它的命令
  7. Linux系统下区别对比(~、/home与/root)
  8. .NET Core 使用 HttpClient SSL 请求出错的解决办法
  9. SpringMVC中controller的跳转
  10. 接口测试--apipost参数定位
  11. 为什么很多程序员不用switch,而是大量的if……else if?
  12. Task/Parallel实现异步多线程
  13. 7.4通过CRaSH管理Spring Boot和定义远程命令
  14. 多Tab点击切换效果实现
  15. icem二维非结构网格划分_ICEM蜗壳非结构网格划分
  16. 示波器X-Y模式显示利萨如(李沙育)与DIY图像
  17. MongoDB磁盘空间碎片化问题排查指南
  18. 浙江小学python教材_PPT、H5、Python、大数据……浙江中小学新教材9月投用!
  19. 【技巧】word交叉引用
  20. Java高级开发必备--Docker进阶(一篇详细教程,进阶Docker)

热门文章

  1. SWUST OJ 978: 输出利用先序遍历创建的二叉树的中序遍历序列
  2. PostgreSQL 教程
  3. 13.Centos软件包管理(rpm,yum,dnf),源码编译安装
  4. 20个最好的Rapidshare文件搜索引擎
  5. windows系统的信使服务
  6. 关于不等号(!=,)没有生效问题
  7. 树莓派设置静态ip的方法
  8. Hive四舍五入等用法
  9. 1688网数据抓取-js抓取篇
  10. 用“心”管理,收获人心