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根据文字内容自动计算宽高的更多相关文章

  1. iOS 国际化 (国际化文字内容不改变,app名字国际化,一键切换语言)

    首先我们要分三个步骤讲解怎么一步步实现app名字国际化.内容国际化.一键切换国际化的: 一.app设置内容或者可以说是app名字或者可以说Info.Plist中的东西国际化  app名字国际化  1. ...

  2. iOS学习-压缩图片(改变图片的宽高)

    压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...

  3. 【iOS】获取视图的中心和宽高

    示例代码: NSLog(@"%f, %f", self.view.center.x, self.view.center.y); NSLog(@"%f, %f", ...

  4. 文字尺寸、宽高的测量 Paint FontMetrics

    Paint.FontMetrics类简介 Google文档中的描述: ) throw new IndexOutOfBoundsException(); if (bounds == null) thro ...

  5. 微信小程序 canvas 内容(宽高) 兼容不同机型

    此功能并没有做所有机型测试,后面会一个一个做一下,如需使用请先自作测试! canvas在小程序中设定的尺寸默认是px 并不是rpx的 所以需要转换一下 PS:设计稿是750像素 wx.getSyste ...

  6. 学习微信小程序之css12设置盒子内容的宽高

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. IOS实现UIButton图文混排、自定义按钮按下和正常状态下不同的背景颜色、根据文字长度自定义UIButton长度

    在一些项目中,我们需要自定义自己的UIButton,使Button上面同时具有图片和文字描述,实现自定义UIButton的图文混排. 首先我们需要定义一个继承自UIButton的类,同时实现自己的in ...

  8. ios label 自动计算行高详解

    在OC当中自动计算行高主要调用系统的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } span ...

  9. ie6下内容会撑开父级设置好的宽高

    在ie6下,内容的宽高会撑开父级设置好的宽高,在其他浏览器下不会. 会出现的问题是:如果内容宽度大于父级设置好的宽度,内容的最后一个元素会换行显示. 注意:在计算时,务必做到精准,不然可能会产生不必要 ...

随机推荐

  1. 如何有效的遍历django的QuerySet

    最近做了一个小的需求,在django模型中通过前台页面的表单的提交(post),后台对post的参数进行解析,通过models模型查询MySQL,将数据结构进行加工,返回到前台页面进行展示.由于对dj ...

  2. Visual Studio 2013 的 Browser Link 功能

    Visual Studio 2013 的 Browser Link 功能 最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本 ...

  3. robotlegs2.0框架实例源码带注释

    robotlegs2.0框架实例源码带注释 Robotlegs2的Starling扩展 有个老外写了robotleges2的starling扩展,地址是 https://github.com/brea ...

  4. 2013.4.A

    =-=最近简直忙疯了.....两眼泪汪汪的...一个星期又磨磨蹭蹭的刷了一套 1.java_c 题1 Java vs C++ [问题描述] Java和C++两种语言的辩手都可以相互争论数小时去证明他们 ...

  5. 设计模式之观察者模式(Observable与Observer)

    设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ...

  6. IController控制器的创建过程

    .NET/ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)   阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactor ...

  7. 寻找最大的k个数

    这个题目是非常经典的一个题目,解法也有很多,现在就把我已经理解的解法记录下来. 题目描述 有n个无序的数,它们各不相等,怎样选出其中的最大的k个数呢? 题目分析: 解法1: 最容易想到的就是把n个数进 ...

  8. 企业架构研究总结(45)——企业架构与建模之使用ArchiMate进行分析(全系列完)

    4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局的做法往往还会造成不必要的浪费.由此可见,一个能够跨越各个领 ...

  9. 适合编写代码的字体 Source Code Pro

    今天看到博客园一篇文章,介绍了一种出身自 Adobe 的适合编码的字体,等宽,支持ClearType等,试用一下吧 项目地址:https://github.com/adobe/source-code- ...

  10. mac osx 10.9安装配置macvim

    如果你已经安装了macvim,升级后又不能用了,建议你可以看看http://kodira.de/2013/10/macvim-osx-10-9-mavericks/这篇文章,如果你还没有安装,下面由我 ...