iOS 让UIButton根据文字内容自动计算宽高
Xcode自带的UIButton控件是没有办法根据文字内容计算自身的宽和高的,下面演示一下问题,
我用代码方式创建一个UIButton,并且设置了一些属性,下面看一下效果图
一切都是这么的美好,跟我们想要的一样啊,btn也跟着文字内容进行自身宽高的更改了啊!那我再设置多一点文字
怀着满怀激动的心情,再看一下效果图
哇哦,怎么变成这个样子了。文字内容都超出btn控件了,跟我们想象的不一样啊。这个问题该如何解决呢?
既然Xcode自带的UIButton类满足不了我们的需求。那么我们就自定义一个UIButton类,只需要继承UIButton就可以了
我在.m文件中重写init方法
其实就是实例化的时候,给Button内部添加了一个uilable控件,这个uilable控件和button之间有约束。首先大家应该懂得系统自带的button控件中有两个子控件,UIImageView 和 UILable,
因为系统自带的UILable和父控件UIButton之间的约束不满足我们目前的需求,所以我重新创建一个UILable,自己设置约束,把文字信息显示在自己创建的UILable上面,不用系统自带的uilable了。下面重写方法
当我把这三个方法重写完毕以后,我再给btn设置有关文本的属性的时候,就会调用上面的方法,那么,我重写就是为了把文字信息本来是设置在UIButton自带的UILable上面的,我重写以后就会把文字信息设置在我自己创建的lable上面,lable会根据文字内容改变自己的大小,因为lable与button之间也有约束,所以Button也会跟着改变了。
下面看一下效果
和我们想要的效果就一样了。
总结:由于UIButton控件有两个子控件:UIImageView(用来显示图片),UILable(用来显示文字);但是系统定义的UILable和UIButton之间的约束不满足我们目前的需求,所以我自己定义一个类,继承UIButton,在初始化的时候,给UIButton再添加一个自己定义的UILable控件,把这个UILable控件和Button之间的约束设置为目前我们需求的约束。当我再给Button设置文字的时候,就设置给自定义的UILable控件中(也就是重写的那几个方法),这个时候自定义的UILable灰根据文字的内容自动计算自己的宽高,因为UILable和button之间有约束,button自身的宽高也会跟着改变。所以button本身自带的UILable我们就不使用了,
iOS 让UIButton根据文字内容自动计算宽高的更多相关文章
- iOS 国际化 (国际化文字内容不改变,app名字国际化,一键切换语言)
首先我们要分三个步骤讲解怎么一步步实现app名字国际化.内容国际化.一键切换国际化的: 一.app设置内容或者可以说是app名字或者可以说Info.Plist中的东西国际化 app名字国际化 1. ...
- iOS学习-压缩图片(改变图片的宽高)
压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...
- 【iOS】获取视图的中心和宽高
示例代码: NSLog(@"%f, %f", self.view.center.x, self.view.center.y); NSLog(@"%f, %f", ...
- 文字尺寸、宽高的测量 Paint FontMetrics
Paint.FontMetrics类简介 Google文档中的描述: ) throw new IndexOutOfBoundsException(); if (bounds == null) thro ...
- 微信小程序 canvas 内容(宽高) 兼容不同机型
此功能并没有做所有机型测试,后面会一个一个做一下,如需使用请先自作测试! canvas在小程序中设定的尺寸默认是px 并不是rpx的 所以需要转换一下 PS:设计稿是750像素 wx.getSyste ...
- 学习微信小程序之css12设置盒子内容的宽高
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- IOS实现UIButton图文混排、自定义按钮按下和正常状态下不同的背景颜色、根据文字长度自定义UIButton长度
在一些项目中,我们需要自定义自己的UIButton,使Button上面同时具有图片和文字描述,实现自定义UIButton的图文混排. 首先我们需要定义一个继承自UIButton的类,同时实现自己的in ...
- ios label 自动计算行高详解
在OC当中自动计算行高主要调用系统的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } span ...
- ie6下内容会撑开父级设置好的宽高
在ie6下,内容的宽高会撑开父级设置好的宽高,在其他浏览器下不会. 会出现的问题是:如果内容宽度大于父级设置好的宽度,内容的最后一个元素会换行显示. 注意:在计算时,务必做到精准,不然可能会产生不必要 ...
随机推荐
- asp.net mvc放在iis7.5中提示404错误 js异步请求失效解决办法
asp.net mvc中js发请求一般写成: $.get("/Can/index"本地上是没有问题的但是部署到iis上,提示404,正确的请求的路径是:/网站名/Can/index ...
- SD卡添加文件,添加不进去,报 Read-only file system错误
android 模拟器手机如何添加文件到sd卡? 在DDMS中直接添加文件到模拟器sd卡如果出现错误类似:Failed to push XXXXX.txt on emulator- : Read-on ...
- AngularJS中数据双向绑定(two-way data-binding)
1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...
- ASP.NET MVC 使用MSBuild生成的几个注意事项
做新项目,当时参考NopCommerce的结构,后台Nop.Admin是一个独立的Area Web Site,但部署的时候发现,使用一键发布,Admin Area会丢失. 研究了下NopCommerc ...
- MVC 4 插件化架构简单实现实例篇
ASP.NET MVC 4 插件化架构简单实现-实例篇 先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集 ...
- Asycn/Await 异步编程初窥(二)
经过总过4天的学习和实践,做完了 WinForm 下 .Net 4.5 的基本异步应用,实现了一个 Http 协议下载的测试程序,为以后使用 .Net 4.5 积累知识和经验.这个小程序完成这样几个作 ...
- 上传文件大小限制,webconfig和IIS配置大文件上传
IIS6下上传大文件没有问题,但是迁移到IIS7下面,上传大文件时,出现HTTP 404错误. IIS配置上传大小,webconfig <!-- 配置允许上传大小 --><httpR ...
- c:翻转一个长句中的每个单词
问题: 输入:“how are you baby-- " 输出:”woh era uoy --ybab " #include<stdio. ...
- Aspose.cells异步读写操作
public class AsyncExcel : Excel { static readonly object _objForlock = new object(); //public List&l ...
- JavaEE:response响应和request请求
Web服务器接收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象既然代表请求和响应,那么我 ...