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. gitlab private-token利用工具

    在渗透测试中,经常会遇到只获得gitlab PRIVATE-TOKEN的情况,而gitlab提供了一系列的api给我们通过这个token去访问gitlab. 所以做了个简单的gitlab工具,以供紧获 ...

  2. Java蓝桥杯——逻辑推理练习题

    逻辑推理题 谁是贼? 公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎.在回答公安人员的问题中: 甲说:"乙没有偷,是丁偷的.&quo ...

  3. Java基础教程——缓冲流

    缓冲流 "缓冲流"也叫"包装流",是对基本输入输出流的增强: 字节缓冲流: BufferedInputStream , BufferedOutputStream ...

  4. CentOS 6.5 iso系统定制

    前言 更改CentOS6.5背景图片.CentOS标题为DntOS,总之就是用ISO安装或者安装后的系统启动时不能有CentOS标志. ISO光盘目录介绍: (1)isolinux 目录存放光盘启动时 ...

  5. Nebula Flink Connector 的原理和实践

    摘要:本文所介绍 Nebula Graph 连接器 Nebula Flink Connector,采用类似 Flink 提供的 Flink Connector 形式,支持 Flink 读写分布式图数据 ...

  6. 发现了一个关于 gin 1.3.0 框架的 bug

    gin 1.3.0 框架 http 响应数据错乱问题排查 问题概述 客户端同时发起多个http请求,gin接受到请求后,其中一个接口响应内容为空,另外一个接口响应内容包含接口1,接口2的响应内容,导致 ...

  7. 在 Spring Boot 配置 Kafka 安全认证

    spring: kafka: bootstrap-servers: IP:端口 listener: missing-topics-fatal: false properties: sasl: mech ...

  8. moviepy音视频开发:audio_fadein、fadeout实现声音淡入淡出

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 为了支持一些常规的音频变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换,这些函数都在moviepy.audio ...

  9. 老猿学5G专栏完结说明

    老猿学5G是因为工作原因促成的,主要目的是为了研究5G的计费架构相关内容,到今天为止,基本上达成目标,因此这个专栏基本上告一段落了. 回想这2个多月的日子,从一个对5G相关知识完全不熟悉的小白,到现在 ...

  10. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...