UIButton是一个常用控件,使用方法十分基本,但是有很多技巧常常不被注意,本文主要介绍UIButton的一些较高级技巧,用于实现图片和标签显示的美观性等。

开发时常常碰到按钮的下侧或者右侧有标题的情况,如下图所示:

 

左侧的是上下结构,右侧的是左右结构,要实现这两种显示,有两种方法。

【按钮的内部控件】

首先我们要了解按钮内部有imageView和titleLabel两个控件,按钮的内边距分为content(整体)、title(标题)、image(图片)三个,因此对于水平排布,可以通过内边距和修改控件坐标两种方式实现;而竖直排布只能通过修改坐标,因为UIButton默认的是水平排布。

①直接修改坐标实现水平和竖直排布:

 self.imageView.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);
self.titleLabel.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);

②通过内边距来修改:

 self.contentEdgeInsets = UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>);
self.titleEdgeInsets = UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>);
self.imageEdgeInsets = UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>);

注意:按钮的标题虽然是titleLabel显示的,但是修改按钮的标题要使用setTitle方法来设置按钮不同状态的标题,不要直接使用titleLabel修改。

【圆角的实现】

imageView的layer成员的cornerRadius属性可以设置圆角的大小:

self.imageView.layer.cornerRadius = 10;

【多个按钮共用高亮图片】

有时候多个按钮虽然内容不同,但是高亮方式应该是一样的,这时候可以通过修改背景来实现高亮的效果,同时禁止默认的渲染(内容变灰色),从而达到较好的效果:

首先是禁止渲染。

 self.adjustsImageWhenDisabled = NO;
self.adjustsImageWhenHighlighted = NO;

然后是设置高亮背景

可以通过不同的逻辑,例如selected、enable等。

 [self setBackgroundImage:[UIImage imageNamed:@"tabbar_separate_selected_bg"] forState:UIControlStateDisabled];

(一〇九)UIButton的使用技巧 -imageView、titleLabel、圆角等的更多相关文章

  1. ImageView的圆角半径

    // 设置imageview的圆角半径 UIImageView *imageView = (UIImageView *)[cell viewWithTag:tag]; imageView.layer. ...

  2. 学习笔记——Maven实战(九)打包的技巧

    “打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR ...

  3. Loggly:提高ElasticSearch性能的九个高级配置技巧

    Loggly日志管理服务在其很多核心功能里使用ElasticSearch作为搜索引擎.Jon Gifford在其文章“ElasticSearch vs Solr”中指出,日志管理领域对搜索技术有了更高 ...

  4. 【技术干货】听阿里云CDN安防技术专家金九讲SystemTap使用技巧

    ​1.简介 SystemTap是一个Linux非常有用的调试(跟踪/探测)工具,常用于Linux 内核或者应用程序的信息采集,比如:获取一个函数里面运行时的变 量.调用堆栈,甚至可以直接修改变量的值, ...

  5. Maven实战(九)——打包的技巧

    "打包"这个词听起来比較土.比較正式的说法应该是"构建项目软件包".详细说就是将项目中的各种文件,比方源代码.编译生成的字节码.配置文件.文档,依照规范的格式生 ...

  6. AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储

    AngularJS项目开发技巧之localStorage存储       注: localStorage深度学习 绪 项目开发完毕,测试阶段发现后台管理端二维码生成有问题,问题在于localStora ...

  7. 数据仓库基础(九)Informatica小技巧(1)

    本文转载自:http://www.cnblogs.com/evencao/p/3148373.html link path:查看某个字段的来源去处,非常有参考的价值.右击你想要看的字段,选择 sele ...

  8. from: Maven实战(九)——打包的技巧

    from : http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package 要点: 1. 打出可执行的jar包, 2. 自定义打包

  9. 数据可视化之powerBI技巧(十九)DAX作图技巧:使用度量值动态分组和配色

    有了前两篇关于分组的铺垫,这篇文章就来学习一个分组的经典应用,图表的动态分组,并对分组动态配色. 假设有十几个产品,每个产品的销售额,是随着时间而变化的,想知道某个时间的每一个产品的销售额与平均销售额 ...

随机推荐

  1. hdu 3308 最长连续上升区间

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. POJ-2299 Ultra-QuickSort---树状数组求逆序对+离散化

    题目链接: https://vjudge.net/problem/POJ-2299 题目大意: 本题要求对于给定的无序数组,求出经过最少多少次相邻元素的交换之后,可以使数组从小到大有序. 两个数(a, ...

  3. Maven集成dubbo时报错 Missing artifact com.alibaba:dubbo:jar:2.8.4

    1.下载dubbo,地址:https://github.com/dangdangdotcom/dubbox . 2.将下载的压缩包解压. 3.命令行进入下载路径,执行mvn install -Dmav ...

  4. JS中怎样判断undefined(比较不错的方法)

    最近做项目碰到的问题.拿出来跟大家分享一下吧. 用servlet赋值给html页面文本框值后,用alert来弹出这个值.结果显示"undefined".所以我就自然的用这个值和字符 ...

  5. div,margin,padding

    <!-- 类比礼品盒里装方块月饼.月饼的食用部分(我们把它称之为月饼肉身)要装在小包装盒里,月饼肉身即为content.月饼肉身与直接包裹它的小包装盒(我们把它叫做月饼的衣服)之间的距离叫pad ...

  6. bootstrap table 和 x-editable 使用方法

    最近需要做一些数据表格,有同事推荐EasyUI,但经过比较还是选择了Bootstrap,一款极为强大的表格组件,基于Bootstrap 的 jQuery .本文还将介绍Bootstrap-editab ...

  7. opencv 3.1.0 访问像素值的三种方法(C++)

    三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...

  8. 嫌我的键盘的backspace太小,就尝试了一下改键工具--keyTweak

    KeyTweak是一个很简单的键盘remap小工具,主要功能就是可以让我们选择某个按键并重新赋予该按键一个新的功能.如果哪天你的键盘某个重要的键坏掉了,可以通过这个免费的软件来重新定义该按键的功能.譬 ...

  9. Python中如何自定义一个计时器

    import time as t class MyTimer(): # 初始化构造函数 def __init__(self): self.prompt = "未开始计时..." s ...

  10. Go 语言函数闭包

    Go 语言支持匿名函数,可作为闭包.匿名函数是一个"内联"语句或表达式.匿名函数的优越性在于可以直接使用函数内的变量,不必申明. 以下实例中,我们创建了函数 getSequence ...