UIButton的竖排图片和文本

UIButton的竖排图片和文本

UIButton的竖排图片和文本第一想法:实现思路第二种方法UIContentHorizontalAlignment/UIControlContentVerticalAlignment完整代码片段:参考资料:更新

UIButton的竖排图片和文本

UIButton的竖排的话,如果不知道方法,就会走很多弯路了

第一想法:实现思路

橙色-> 按钮frame

紫色->图片frame

绿色->文本frame

正常情况下,如果有图片,有文本,在 按钮宽度 > 图片宽度+文字宽度的情况下,按钮的frame布局是图1所示.

然而我们需要实现的是图4的效果.

如果将开始状态和结束状态重叠,如图2.此时,按照图2的图片frame的改变,文本的frame的改变来计算,你有可能会计算正确,当前也有可能计算不正确,这取决于iOS系统的心情,哈哈.

第二种方法UIContentHorizontalAlignment/UIControlContentVerticalAlignment

可以看看这两个属性:

  • UIControlContentVerticalAlignment
  • UIContentHorizontalAlignment

The horizontal alignment of content (text or image) within the receive

The vertical alignment of content (text and images) within a control.

(from: xcdoc://?url=developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIControl_Class/index.html )

在头文件中也有这两个属性的说明:

@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment; // how to position content vertically inside control. default is center

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center

(from UIKit/UIControl.h)

从这里可以看到,这两个属性默认的值是center,也就是说:

控件内部的元素的排列方式是:水平方向居中,垂直方向居中

也就是图1的效果:

但是,如果我们将这两个属性都设置为左对齐,

 
    [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
    [button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

此时,这两个按钮的位置就是图3的效果了.

好了,这个时候,要想从图3的状态转换到图4的状态就不是难事了.

 
    [button setImageEdgeInsets:UIEdgeInsetsMake(imageTopGap,//图片距离顶部距离
                                                           (buttonWidth-image.size.width)/2,//图片向右偏移距离
                                                           0,
                                                           0)];
    [button setTitleEdgeInsets:UIEdgeInsetsMake((image.size.height + imageTopGap) + textTopGap, //图片底部+文字与图片间距                                                  
                                                (buttonWidth - textWidth)/2 - image.size.width, //文字向右偏移距离                                                         
                                                0,                                                     
                                                0 )];

完整代码片段:

 
    CGFloat buttonWidth = 80;
    CGFloat buttonHeight = 80;
    CGFloat textWidth = 40;
    CGFloat imageTopGap = 10;
    CGFloat textTopGap = 10;
    [self.nomorlButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
    [self.nomorlButton setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];
    [self.nomorlButton setImageEdgeInsets:UIEdgeInsetsMake(imageTopGap,//图片距离顶部距离
                                                           (buttonWidth-image.size.width)/2,//图片向右偏移距离
                                                           0, 0)];
    [self.nomorlButton setTitleEdgeInsets:UIEdgeInsetsMake((image.size.height + imageTopGap) + textTopGap, //图片底部+文字与图片间距
                                                           (buttonWidth - textWidth)/2 - image.size.width, //文字向右偏移距离
                                                           0,
                                                           0 )];

参考资料:

  • http://blog.csdn.net/worldzhy/article/details/41284157
  • www.developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIControl_Class/index.html

更新

更新时间更新内容
2015-09-220905_04fix: 图编号错误

undefined

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他是绝世天才,却只开了半辈子的挂!死后惨遭封号200年,这就是和牛顿抬杠的下场.........

全世界只有3.14 % 的人关注了爆炸吧知识既生胡何生顿1703年3月3日,68岁的“英国达芬奇”躺在病床上,奄奄一息。临终前,他仍在惦记一个事儿:他希望,当年砸牛顿头上的,是个榴莲。因为是牛顿,让终身…

MS SQL Server查询优化方法

(1) ●查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的…

CXF小窥:知道服务器端wsdl地址,如何本地测试服务接口

今天boss给了一篇公司与短信平台公司合作的文档,让我测试一下是否真正常通信,以前项目中webservice都是其他同事在弄,今天头大了,查了一会资料,终于搞定了!现在记录一下 文档上有 WSDL:http://s…

使用LightBDD轻松实现行为驱动开发

前言上次,我们介绍了行为驱动开发(BDD)它的优点是可以使用纯文本编写测试用例,不需要编程经验。如果测试用例也全部是程序员写的情况,这种方式反而存在障碍,feature使用与编写代码的语言完全不同的语言来编…

Android百度地图开发01之初体验

做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一、申请AK(API Key) 要…

php cli swoole mysql_[了解实践]Swoole、PHP与MySQL:连接池,swoole扩展实现真正的PHP数据库连接池。...

背景:swoole的出现,包括PHP出现前,在新浪企业邮箱就有基于Sun Solaris 系统上面用c写Mysql的长连接,那时候的长连接是基于RPC实现,对mysql那一端形成一个远程过程的调用,通过XDR数据结构进行解析mysql传来的…

会按摩的充气颈枕,只占行李箱一个角,却能让你的脖子爽到爆

▲ 点击查看出差、旅游、探亲,舟车劳顿的路上,想要休息实在太难。临近国庆,有多少人准备外出旅游、回家或者出差的?然而在舟车劳顿的路上,想要休息一下,不要太难。睡到一半撞到车窗痛醒,不小心歪…

转:编写高效的Android代码

毫无疑问,基于Android平台的设备一定是嵌入式设备。现代的手持设备不仅仅是一部电话那么简单,它还是一个小型的手持电脑,但是,即使是最快的最高端的手持设备也远远比不上一个中等性能的桌面机。 这就是为什么在编写Android程序时要…

給定周中的特定天

转:給定周中的特定天 另一個常見的需求是,僅在每月中的特定星期數運行。例如,可能希望在每個月的第一個星期一或星期五運行一個報告。為了完成此任務,可以使用與上面類似的過程。對於給定周中的任何天,它一定屬於以下日期範圍之一…

Envoy实现.NET架构的网关(一)静态配置与文件动态配置

什么是Gateway在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题如果没有 API 网关模式,客户端应用将与内部微服务相耦合。在客户端应用中,单个页面/屏幕可能需要多次调用多个服务。 如果没…

corosync和pacemaker实现httpd和mysql双集群

一、环境介绍:三台均为双网卡:openstack-control.example.com openstack-control eth0:172.16.171.100eth1:10.1.1.100 openstack-nova.example.com openstack-novaeth0:172.16.171.110eth1:10.1.1.110openstack-neutron.example.com openstack-neutrone…

25岁男生要有多少存款才能让女友满意?

1 男女观念差异这么大的吗?▼2 演绎人生从落魄到适应再到悠哉的三个阶段▼3 牌子大,了不起咯~▼4 这鬼才文案用在这里屈才了▼5 狗子:你就说,我演的哪里不像?▼6 7个月一点没变我觉得已经蛮厉害得了▼7 不小心跟…

查看mysql数据库历史_查看mysql数据库历史

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

IT学习--学习不一定要用在现实工作中

很多人在学习知识的时候总是说这个学了没用,这个学了用不上,所以很多人就干脆不学。今天就站在我个人观点上对这个问题进行讨论 以考CCIE为例,有些工作经验的考生会对自己的工作有个的认识,知道自己哪些知识是工作上用得上的&…

心得9--jsp设计模版

1.常用的面向对象设计模式有4种: Factory模式、Singleton模式、Facade模式和MVC架构模式。 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSPJavaBean模式,一种是ServletJSPJavaBean(MVC)模式。 JSP设计模…

C# 泛型的使用

01—泛型概述泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据的类型来进行参数化。泛型能在编译时提供强…

80040e14 mysql_【ASP】提示错误80040e14

是的,提示Cls_vbsPage.asp 行164 有问题,整个代码如下:Class Cls_vbsPagePrivate oConn 连接对象Private iPagesize 每页记录数Private sPageName 地址栏页数参数名Private sDbType数据库类型,AC为access,MSSQL为SQL SERVER2000…

在数学世界,都有这些美妙的数学公式是你不认识的......

全世界只有3.14 % 的人关注了爆炸吧知识什么是数学?华罗庚说:宇宙之大,粒子之微,火箭之速,化工之巧,地球之变,生物之谜,日用之繁,无处不用数学......回首往昔&#xff0c…

Android MediaScanner:(一)MediaScanner总体架构

Android MediaScanner:(一)MediaScanner总体架构 分类: Android android.multimedia2012-05-19 18:29 5050人阅读 评论(5) 收藏 举报androidservice数据库工作interfaceinsert田海立csdn 2012-05-19 本文是笔者的分析归纳&#xf…

协变和逆变

http://msdn.microsoft.com/zh-cn/library/vstudio/dd997386.aspx转载于:https://www.cnblogs.com/mingyongcheng/archive/2012/11/15/2771568.html