最近在做 UI 的时候,遇到一排 button 需要通过后端来控制它的 image 和 title。但由于 Android 和 iOS 对图片要求的尺寸有差异,因此通过后端开控制图片大小比较麻烦。

由于我们对 button 的尺寸有具体的要求,因此,当代码写下来的时候,效果是这样的:

    [self.button1 sd_setImageWithURL:[NSURL URLWithString:ResourceUrl] forState:UIControlStateNormal];[self.button1 setTitle:@"一碗米饭" forState:UIControlStateNormal];self.button1.frame = CGRectMake(50, 50, 120, 50);

效果图如下:


这样的结果显然不符合设计的要求。因此需要我们改变 button 内部 image 的大小。


总的来说,有两个方案:

一、通过 UIEdgeInsetsMake 去图片改变大小

UIButton 的这两个属性:imageEdgeInsets 、 titleEdgeInsets,分别代表着 image 和 title 距离初始状态下的偏移量。所谓的初始状态就是设置完 image 和 title 之后,image 和 title 的默认位置。此时是 UIEdgeInsetsMake(0, 0, 0, 0)UIEdgeInsetsZero

根据上面的原理,我们先调整 image 的大小 (最终我们想要的图片尺寸是 (20,20) ):

self.button2.imageEdgeInsets = UIEdgeInsetsMake(15, 20, 15, 80);

解释一下四个参数:
由于 button 的高度是 50 ,图片要求是20,因此,图片只要距离 button 的 top 和 bottom 各 15 ,即可满足高度。

button 的宽度是 120,因此如果没有 title ,那么 image 只需距离 button 的 left 和 right 各(120-20)/2 即 50 即可。

但由于 title 的存在,image 距离 left 必须要小于 50,距离 right 的自然也就应该大于50。问题的关键就是如何确定这个具体的值。

其实最后的效果无非是让图片和文字整体居中,这里我们就需要计算 title的实际宽度,具体计算方法很简单,这里就不说了,知道了最终图片和文字的宽度,结合 button 的初始状态下图片的文字的位置,剩下的就是一些数学知识了。(如果你比较懒,而且 button 的 title 长度是固定的话,慢慢试也行,毕竟是有规律的)。

效果图如下:



二、提前改变网络图片的大小

所谓提前改变网络图片的大小,就是在图片下载下载后,赋给 button 的 image 之前,改变大小:

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:ResourceUrl] options:SDWebImageDownloaderHighPriority progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {UIImage *targetImage = [self originImage:image scaleToSize:CGSizeMake(20, 20)];[self.button setImage:targetImage forState:UIControlStateNormal];}];

改变图片大小的方法:

-(UIImage*)originImage:(UIImage *)image scaleToSize:(CGSize)size{UIGraphicsBeginImageContext(size);[image drawInRect:CGRectMake(0, 0, size.width, size.height)];UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return scaledImage;
}

这样做比较假单,而且很好理解,但是由于图片下载是耗时操作,会导致 button 先显示 一个居中的 title ,图片裁剪完成后,button 重新布局,会出现闪动的问题。体验不好。

当然,你肯定想到了解决办法,提前设置一个正确尺寸的默认图就好了!


如果说还有其他办法,那就是用 自定义一个 button 了 ,除非有特别的需求,比如 button 内的动画,否则,上面的方法就够了。

UIButton 获取网络图片的排版技巧相关推荐

  1. Latex排版技巧汇总

    Latex排版技巧汇总 一.前言 二.准备工作 1. Latex环境配置 2. 英文期刊Latex模板获取 三.Latex输入各种符号 四.Latex公式 1. 从Mathtype中获取不复杂公式的L ...

  2. Android中获取网络图片的三种方法

    android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用 ...

  3. android获取网络图片

    2019独角兽企业重金招聘Python工程师标准>>> 资源描述: 关于android获取网络图片主要是把网络图片的数据流读入到内存中然后用 1.Bitmap bitMap = Bi ...

  4. 检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

    判断图片是否缓存NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];//请求网络地址数 ...

  5. tableView 获取网络图片,并且设置为圆角(优化,fps)

    代码地址如下: http://www.demodashi.com/demo/11088.html 一.准备工作 例子比较精简,没有什么特殊要求,具备Xocde8.0左右版本的就好 二.程序实现 1.相 ...

  6. UI设计素材帮手, 排版技巧设计师

    排版技巧设计师 要点: 聪明的图形设计师喜欢使用的排版探索型的外观和实际键入说之间的相互作用. 进行通信的消息时,一个平衡具有视觉和design.Typography的口头方面之间实现是布置类型del ...

  7. C语言:运行中获取宏名字的技巧

    C语言:运行中获取宏名字的技巧 在调试C语言程序时,有时需要打印宏的名字.可以通过定义宏,宏名字的数组来获得. 例如: [cpp] view plaincopy #include <stdio. ...

  8. Word不会排版!看这里,3分钟教你学会30个排版技巧

    时光如流水,很快又要到一年一度的毕业季了.毕业论文这个让人爱恨兼备的小妖精又要出来兴风作浪了,一班几十上百人的论文排版还真是"各有千秋".今天小编给大家分享一些Word排版技巧,希 ...

  9. 微信文章排版技巧和相关排版工具

    微信文章排版技巧 微信公众号文章内容质量丰富是一方面,内容整体的图文排版是否整洁.简约.美观也是很重要的一方面.一篇图文如果没有经过排版处理,那么很长的文章会就会让人失去耐心去阅读,如果整体文章排版很 ...

最新文章

  1. 如何网络推广教大家怎样通过提高用户粘性来助力排名提升?
  2. wpf 动画_WPF中监视动画进度
  3. mysql+显示表ddl_MySQL_DDL_数据库和表的操作
  4. 在Windows XP 中使用Active Directory(活动目录)
  5. 支持java虚拟主机_为何缺乏支持Java的虚拟主机
  6. 揭秘!微软 Build 2020 开发者大会将启,邀您共赴线上新旅程
  7. VMware出现配置文件 .vmx 是由VMware产品创建,但该产品与此版 VMware workstation 不兼容,因此无法使用(VMware版本不兼容问题)
  8. web前端到底是什么?有前途吗
  9. DNN的Friendly URL剖析及应用
  10. 零知识证明在匿名投票中的应用
  11. ai人工智能_AI破坏已经开始
  12. 计算机备份u盘,如何备份电脑系统到u盘
  13. 《人月神话》-第19章-20年后的《人月神话》
  14. 量子力学 计算机应用,量子力学在身边:量子力学在现实世界的十大应用.doc
  15. win10关闭计算机的原因,win10电脑自动关机是怎么回事
  16. 《解构产品经理互联网产品策划入门》PDF+《互联网产品运营产品经理的10堂精英课》PDF分析...
  17. 小李飞刀:Python我又来啦,例无虚发~
  18. html play控件,HTML DOM Video play()用法及代码示例
  19. springcould 微服务 nacos 跨域问题
  20. 云计算:细分之七大类商业模式

热门文章

  1. 如何用计算机装B,计算机专业装逼经验(转)
  2. 浙江省杭州职称评审申报时间
  3. oracle 12.1.0.2版本对象ku$_user_view是失效状态的修复
  4. 英文连写字体怎么练_重点名师精心整理“衡水体”英文书写视频,现在开始练,期末拿高分!...
  5. Thinkpad t450s 加装ssd 记录
  6. 情侣一起看同步看电影H5网站 电影同步观看平台 (自己写的 已开源)
  7. 苹果ipad 9.7寸1代2代,改装便携显示器铝外壳,欢迎DIY朋友们,满血复活,废物利用!
  8. MySQL数据库学习(二)
  9. Error: Unknown command: cask
  10. SystemviewV3.12移到目标板