Swift SnapKit

本文介绍了Swift中的SnapKit库在手动布局中的基本用法和进阶技巧,包括添加约束、更新约束和重设约束。特别强调了在使用SnapKit时的注意事项,如需要先将视图添加到父视图,以及更新和重设约束的正确操作。文章还提及了如何确定父视图的宽高,并提示避免同时使用约束和frame。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本用法

snp是手动布局神器,在做约束的时候经常用到,首先导入 pod 依赖

pod 'SnapKit', '~> 5.0.0'

1.添加约束

let button = UIButton()
addSubView(button)
button.snp.makeConstraints { (make) in
	// 上方间距 
	make.top.equalTo(352 * UIScreen.screenWidth / 375)
	// 高和imageView相同
    make.height.equalTo(imageView.snp.height)
    // centerX和父视图一样
    make.centerX.equalToSuperview()
    // 宽度比imgView少10
    make.width.equalTo(imageView.snp.width).offset(-10)
}

注意:

  • 如果要使用.equalToSuperview(),必须先把该控件添加到父视图上,否则会报错Expected superview but found nil when attempting make constraint equalToSuperview
  • 如果要使用equalTo(imageView.snp.width),imgView必须已经添加到父视图上,否则会报错
  • make.left.equalTo(20)是相对于父视图的
  • 关于offset:偏移量,是相对于equalTo()里面的控件位置而言的
+-
top/bottom/centerY向下偏移向上偏移
left/right/centerX向右偏移向左偏移

2.更新约束

button.snp.updateConstraints { (make) in
	// button的width变为300
    make.width.equalTo(300)
}

注意:

  • 更新是指在存在的前提下更新,所以要更新的约束必须存在,负责会报错
  • 其他的约束还是维持原来的样子

3.重设约束

button.snp.remakeConstraints { (make) in
	make.width.equalTo(300)
    make.top.equalToSuperview().offset(10)
    make.left.equalTo(20)
    make.height.equalTo(500)
}

注意:

  • 重设约束会把原来所有的约束都删除掉,所以重新设置时要设置周全

二、进阶用法

1.确定父视图宽高

let contentView = MyContentView()
view.addSubview(collectionView)
contentView.snp.makeConstraints {(make) in
	make.width.equalTo(300)
    make.top.equalToSuperview().offset(10)
    make.left.equalTo(20)
    make.height.equalTo(500)
    // 确定父视图高度
    make.height.equalToSuperView()
    // 确定父视图宽度
    make.with.equalToSuperView()
}

写在最后:约束最好不要和frame混用

contentView.snp.makeConstraints {(make) in
	make.width.equalTo(300)
    make.top.equalToSuperview().offset(10)
    make.left.equalTo(20)
    make.height.equalTo(500)
}
// 会冲突,变成四不像
contentView.frame.size = CGSize(width: 200, height: 100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值