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岁的“英国达芬奇”躺在病床上,奄奄一息。临终前,他仍在惦记一个事儿:他希望,当年砸牛顿头上的,是个榴莲。因为是牛顿,让终身…

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

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

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

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

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

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

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 不小心跟…

心得9--jsp设计模版

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

C# 泛型的使用

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

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

全世界只有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…

报表系统FineReport通过权限控制数据访问方案

2019独角兽企业重金招聘Python工程师标准>>> 问题:实际应用环境中,不同角色的人可能对数据具有不同的访问权限,通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求,但对于角色较多的情况,就需要制…

SkyWalking配上告警更优秀

前言对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件、短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的告警。正…

神抓拍!2020搞笑野生动物摄影大赛,哈哈哈哈哈笑到头掉

全世界只有3.14 % 的人关注了爆炸吧知识图片来自CWPAs 2020小动物们到底能有多好玩让我们来看看今年的搞笑野生动物摄影大赛吧保准叫你从头笑到尾(以下是入围作品)“飚自行车的”猴看起来像个酷猴▲摄影:Yevhen Samuchenko真情实感演绎“我太…

绝不翻车珍珠奶茶做法

1 如何在家自制珍珠奶茶▼2 儿子,妈妈给你烤小饼干哦▼3 放假太久了连自己哪个班都忘了▼4 想问下,鸟是在哪都能起窝吗?▼5 不到万不得已,绝不去做▼6 这个店名太童年阴影了▼7 小鸡做错了什么?▼你点的每个赞&…

施一公:“中国式科研”误国误民!表面上一片繁荣,实则深藏危机

全世界只有3.14 % 的人关注了爆炸吧知识论文和科技实力是两回事在全国政协十三届一次会议上,中国科学院院士、清华大学原副校长施一公曾说道:“我以前曾经预测,中国会在2020年论文数超过美国,没想到我们提前完成了。”但面对这项数…

正确使用和理解C#中的闭包

定义 我们把在Lambda表达式(或匿名方法)中所引用的外部变量称为捕获变量。而捕获变量的表达式就称为闭包。捕获变量 捕获的变量会在真正调用委托时“赋值”,而不是在捕获时“赋值”,即总是使用捕获变量的最新的值。如下代码所示,调用委托时&a…

重磅公开!36个高考数学破题大招

前段时间,超模君发了关于极值点偏移问题的总结资料,朋友们都觉得内容整合得十分详细。同时,也有不少很多朋友留言说希望有其他高考数学常考问题的解题总结。确实,毕竟高考涉及的内容非常多,比如说参数范围问题、数列求…

Linux服务器数据备份

2019独角兽企业重金招聘Python工程师标准>>> 服务器上的数据是如此重要,以至于我们定期要对其进行备份!这里讲一下mysql的备份和使用rsync同步服务器上的文件,从而实现多台linux服务器之间的文件的备份。 一 Mysql备份 mysql的备份…

与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......

全世界只有3.14 % 的人关注了爆炸吧知识从武汉新冠疫情爆发到如今,陈薇没有一天休息。短短半年间,54岁的她头发从黑到白,也哭了好几次。刚去武汉-现在陈薇的母亲也在电视上看到了女儿的变化:“她变老了,都有白头发了。…