AutoLayout与UIbutton
1、UIButton贴近右边,高度固定,宽度跟随标题变化
class TestButton: UIButton {
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let btn = TestButton(type: .custom)
btn.setTitle("TestButton 1 2 3 sdasdad dadasd", for: .normal)
btn.setTitleColor(.black, for: .normal)
btn.layer.borderColor = UIColor.red.cgColor
btn.layer.borderWidth = 1
view.addSubview(btn)
btn.snp.makeConstraints { (make) in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-20)
make.height.equalTo(30)
}
}
}
效果:

2、限制宽度,多了就换行
class TestButton: UIButton {
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let btn = TestButton(type: .custom)
btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal)
btn.setTitleColor(.black, for: .normal)
btn.titleLabel?.numberOfLines = 0
btn.layer.borderColor = UIColor.red.cgColor
btn.layer.borderWidth = 1
view.addSubview(btn)
btn.snp.makeConstraints { (make) in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-20)
// make.height.equalTo(30)
make.width.lessThanOrEqualTo(200)
}
}
}
效果:

明显,UIButton的框太小了,限制了titleLabel,现在想实现,button的高度和文字高度一样
修改如下
class TestButton: UIButton {
override var intrinsicContentSize: CGSize {
return titleLabel!.sizeThatFits(CGSize(width: titleLabel!.preferredMaxLayoutWidth, height: .greatestFiniteMagnitude))
}
override func layoutSubviews() {
titleLabel?.preferredMaxLayoutWidth = frame.size.width
super.layoutSubviews()
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let btn = TestButton(type: .custom)
btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal)
btn.setTitleColor(.black, for: .normal)
btn.titleLabel?.numberOfLines = 0
btn.layer.borderColor = UIColor.red.cgColor
btn.layer.borderWidth = 1
view.addSubview(btn)
btn.snp.makeConstraints { (make) in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-20)
// make.height.equalTo(30)
make.width.lessThanOrEqualTo(200)
}
}
}
效果:

总结:
Autolayout和intrinsicContentSize有关,UIButton的intrinsicContentSize默认和标题长短没有关系,和UILabel不一样
AutoLayout与UIbutton的更多相关文章
- iOS 屏幕适配:autoResizing autoLayout和sizeClass
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- Masonry(AutoLayout)的使用
Masonry 仍然在维持. 如果使用 Swift 开发, 建议使用 SnapKit. Masonry 以一种简便可读的代码实现子控件自动布局 ,甚至可以实现一些动画,是一中轻量级的框架. Mason ...
- 在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority
我们继续来看在代码中使用Autolayout的话题.先说intrinsicContentSize,也就是控件的内置大小.比如UILabel,UIButton等控件,他们都有自己的内置大小.控件的内置大 ...
- autolayout autoresizing
WWDC 2012 Session笔记——202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ...
- 【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)
关于AutoLayout,最早从iOS6开始引入使用. 主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换. 网上大量的资料都在介绍xib和storyboard,如何使用AutoLa ...
- iOS开发-VFL(Visual format language)和Autolayout
AutoLayout不管是在StoryBorad还是在xib中都相对来说比较简单,VFL(Visual fromat language)可视化语言基本上用到的比较少,在xCode4时候自动布局的概 ...
- AutoLayout技术选型和应用
前言:这篇文章是笔者在项目中对布局技术进行技术选型和应用的相关介绍,供大家参考. && [self.buttonscount] > 0) { UIButton *button = ...
- 使用代码创建AutoLayout约束
使用代码创建AutoLayout约束 1.代码创建约束的步骤 2.代码创建约束的常用方法 3.代码创建约束的原则 4.禁用Autoresizing的原因 5. 设置相对状态栏的约束,使用self.to ...
- Autoresizing和AutoLayout
1 使用Autoresizing的方式进行界面布局 1.1 问题 Autoresizing是IOS旧版的自动布局技术,现在仍然被很多企业使用.本案例将学习如何使用Autoresizing完成界面的布局 ...
- iOS 8 AutoLayOut入门
http://blog.csdn.net/asdfg13697116596/article/details/42562565 iOS 8 AutoLayOut入门自从iOS6带来Auto Layout ...
随机推荐
- 一个.NET开源的功能丰富、灵活易用的 Windows 窗口增强神器
前言 通常情况下 Windows 中的软件窗口界面一般只包含还原.移动.大小.最大化.最小化.关闭等几个基本的操作: 今天大姚给大家推荐一个.NET开源.免费(MIT License).功能丰富.灵活 ...
- 英文A+B
A+B 题目描述 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A ...
- 使用EasyCV Mask2Former轻松实现图像分割
简介: EasyCV可以轻松预测图像的分割谱以及训练定制化的分割模型.本文主要介绍如何使用EasyCV实现实例分割.全景分割和语义分割,及相关算法思想. 作者:贺弘 谦言 临在 导言 图像分割(Ima ...
- 地址标准化服务AI深度学习模型推理优化实践
简介: 深度学习已在面向自然语言处理等领域的实际业务场景中广泛落地,对它的推理性能优化成为了部署环节中重要的一环.推理性能的提升:一方面,可以充分发挥部署硬件的能力,降低用户响应时间,同时节省成本:另 ...
- Let's Fluent:更顺滑的MyBatis
简介: 只需瞅一眼Google Trends上全球Java界最热门的两款SQL映射框架近一年的对比数字,就不难了解其实力分布:在此领域,MyBatis早已占领东亚地区开发者市场,并以绝对优势稳居中国最 ...
- 打通JAVA与内核系列之一ReentrantLock锁的实现原理
简介:写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁).其中synchronized锁是JAVA语言层面提供的能力 ...
- PyQt5编程学习之控件基类QObject深入
一.QObject描述: PyQt几乎所有的类都是从QObject直接或间接继承的,QObject是所有PyQt类的基类,是PyQt对象模型的核心. 二.基类QObject的功能: (一)操作对象名称 ...
- [Ethereum] Gas Station Network (GSN) eip-1613 与 Gas Relay Network (GRN) eip-1077
在 Ethereum dapp 中,任何涉及状态改动的交易都需要消耗 Gas,这限制了很多没有钱包或者 ETH 的用户对 dapp 的采用. 理念 让非以太用户能够访问智能合约 (如dapps),允许 ...
- dotnet 修复在 Linux 上使用 SkiaSharp 提示找不到 libSkiaSharp 库
本文告诉大家如何简单修复在 Linux 上使用 SkiaSharp 提示找不到 libSkiaSharp 库 我的应用在 Windows 上跑的好好的,放在 Linux 上一运行就炸掉了,异常内容如下 ...
- WinForm 下的高性能笔迹方法
在 WPF 中可以通过 StylusPlugIn 的方式快速从触摸线程拿到触摸数据,而 WinForms 没有这个机制,但是可以通过 Microsoft.Ink 组件和 WPF 相同在 RealTim ...