1.根据字符串的长度确定Button的长度(button的高度给定)

let hight:CGFloat = 30.0

let size1 = CGSize(width: getLabWidth(labelStr: "我的升级换代卡号多少", font: UIFont.systemFont(ofSize: 14), height: hight), height: hight)

let rect1 = CGRect(origin: CGPoint(x:40,y:200), size: size1)//设置Button的frame

let bt1:UIButton = UIButton.init(frame: rect1)

bt1.backgroundColor = UIColor.red//设置Button的背景色

bt1.titleLabel?.font = UIFont.systemFont(ofSize: 12)//设置Button的字体大小

bt1.titleLabel?.numberOfLines = 0;//设置Button的文本换行

bt1.setTitle("我的手机点哈卡的卡删繁就简哈哈放假萨法介绍", for: UIControlState.normal)//设置Button的文本内容

bt1.addTarget(self, action: #selector(didBt), for: UIControlEvents.touchUpInside)//设置Button的点击事件

bt1.isSelected = true//设置Button的选中状态

bt1.layer.borderWidth = 2.0;//设置Button的边框宽度

bt1.layer.borderColor = UIColor.blue.cgColor//设置Button的边框颜色

bt1.layer.cornerRadius = 10;//设置Button的圆角弧度

bt1.layer.masksToBounds = true

self.view.addSubview(bt1)//把button添加到控制器里

2.根据字符串的长度确定Button的高度(button的宽度给定)

let width:CGFloat = 60.0;

let size = CGSize(width: width, height: getLabHeigh(labelStr: "我的升级换代卡号多少", font: UIFont.systemFont(ofSize: 14), width: width))

let rect = CGRect(origin: CGPoint(x:20,y:100), size: size)//设置Button的frame

let bt:UIButton = UIButton.init(frame: rect)

bt.backgroundColor = UIColor.red//设置Button的背景色

bt.titleLabel?.font = UIFont.systemFont(ofSize: 12)//设置Button的文本字体大小

bt.titleLabel?.numberOfLines = 0;

bt.setTitle("我的升级换代卡号多少", for: UIControlState.normal)//设置Button的文本内容

bt.addTarget(self, action: #selector(didBt), for: UIControlEvents.touchUpInside)//设置Button的点击事件

bt.isSelected = true//设置Button的选中状态

self.view.addSubview(bt)

3.相关方法

@objc func didBt(bt:UIButton){

if bt.isSelected == true {

self.view.backgroundColor = UIColor.red

bt.isSelected = false

}else{

self.view.backgroundColor = UIColor.yellow

bt.isSelected = true

}

}

func getLabHeigh(labelStr:String,font:UIFont,width:CGFloat) -> CGFloat {

let statusLabelText: NSString = labelStr as NSString

let size = CGSize(width: width, height: 900)

let dic = NSDictionary(object: font, forKey: NSFontAttributeName as NSCopying)

let strSize = statusLabelText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic as? [String : AnyObject], context: nil).size

return strSize.height

}

func getLabWidth(labelStr:String,font:UIFont,height:CGFloat) -> CGFloat {

let statusLabelText: NSString = labelStr as NSString

let size = CGSize(width:900,height: height)

let dic = NSDictionary(object: font, forKey: NSFontAttributeName as NSCopying)

let strSize = statusLabelText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic as? [String : AnyObject], context: nil).size

return strSize.width

}

Swift3.0学习之Button的更多相关文章

  1. Swift3.0学习之基础部分

    1.常量和变量 常量和变量把一个名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个指定类型的值(比如数字 10 或者字符串 " ...

  2. swift学习笔记 - swift3.0用GCD实现计时器

    swift3.0之后,GCD的语法发生了翻天覆地的变化,从过去的c语法变成了点语法,下面是变化之后用GCD实现计时器的方法: 先贴代码: // 定义需要计时的时间 var timeCount = 60 ...

  3. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  4. iOS 日期处理 (Swift3.0 NSDate)

    处理日期的常见情景 NSDate -> String & String -> NSDate 日期比较 日期计算(基于参考日期 +/- 一定时间) 计算日期间的差异 拆解NSDate ...

  5. Swift3.0语法变化

    写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...

  6. swift3.0 hello swift(1)

    一直对swift感兴趣,在前段时间的新闻中,大多是swift3.0发布和xcode8.0的改进,因为改动比较大,以前使用swift2.x做项目的人,都在担心其项目从2.x迁移到3.0+的问题.以前简单 ...

  7. Bootstrap3.0学习第八轮

    Bootstrap3.0学习第八轮(工具Class)   前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/34 ...

  8. Bootstrap3.0学习第六轮(表单)

    Bootstrap3.0学习第六轮(表单) 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.h ...

  9. swift3.0 简单直播和简单网络音乐播放器

    本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...

随机推荐

  1. 图像分割必备知识点 | Unet++超详解+注解

    文章来自周纵苇大佬的知乎,是Unet++模型的一作大佬,其在2019年底详细剖析了Unet++模型,讲解的非常好.所以在此做一个搬运+个人的理解. 文中加粗部分为个人做的注解.需要讨论交流的朋友可以加 ...

  2. celery异步发送短信

    1.使用celery异步发送短信 1.1 在 celery_task/mian.py 中添加发送短信函数 # celery项目中的所有导包地址, 都是以CELERY_BASE_DIR为基准设定. # ...

  3. 关于Django的序列化问题。serializers

    在DRF框架里,ModelSerializers是一个重要的组件.大大的帮组我们节省了数据序列化的过程,真的可以说是良心产品.接手的这个项目用的Django,前人的代码都是手动序列化的,为了保证风格的 ...

  4. 三分法-洛谷P3382

    wampserver没下下来,lcm莫比乌斯反演写挂了,splay树段错误, nobody ever knows writing bugs better than me 然后今晚要打cf,不如先写个三 ...

  5. PyQt(Python+Qt)学习随笔:QTableWidget的findItems和selectedItems搜索项和访问选中项方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.搜索项 在表格部件中,可以根据文本以及匹配模式来搜索满足条件的项,调用语法: list[QTab ...

  6. linux常用快捷键总结

    启动器:<super> 显示桌面:<super>D 文件管理器:<super>E 显示工作区:<super>S 打开终端:ctrl+alt+T 关闭窗口 ...

  7. ADF 第二篇:使用UI创建ADF

    用户可以通过UI来创建ADF,在UI中创建ADF时,用户不需要下载单独的IDE,而仅仅通过 Microsoft Edge 或者 Google Chrome浏览器.用户登录Azure Portal,选择 ...

  8. 第二章、 Centos 6.8安装 Docker

    2.1检查Docker的先决条件 64位 CPU计算机(x86_64),不支持32位 CPU 运行Linux 3.8 或更高版本内核. 内核必须支持一种合适的存储驱动(storage driver), ...

  9. 微信小程序-卡券开发(前端)

    刚完成一个微信小程序卡券开发的项目.下面记录开发前,自己困惑的几个问题. 因为我只负责了前端.所以下面主要是前端的工作. 项目概述:按照设计图开发好首页上的优惠券列表,点击某个优惠券,输入手机号,点击 ...

  10. rsync 参数说明及使用参数笔记好文摘抄

    一.前言 最近发现rsync挺好用的--不过参数有点多,所以这儿写一篇给自己以后要用的时候做个参考. 二.参数说明 这儿全是我翻资料连蒙带猜(有些实在是不好解释)翻译出来的,请各位转载的留个名啊,虽然 ...