iOS开发中如何为UIImageView添加锚点布局约束?
修正iOS图片锚点约束的代码问题
嘿,我看到你这段给UIImageView添加锚点约束的代码有两处关键问题,咱们一步步来修正:
问题1:缺少关闭自动约束转换的设置
UIView默认会把autoresizingMask自动转换成Auto Layout约束,这会和你手动添加的约束冲突,导致约束不生效甚至抛出错误。所以必须先把这个属性设为false。
问题2:约束添加的语法错误
你写的imageView.(topAnchor, bottomAnchor, rightAnchor, leftAnchor)是完全错误的语法,原生Auto Layout有两种常用的正确添加方式:
方式1:批量激活约束(推荐)
这种方式代码更简洁,也便于维护:
import UIKit class PageCell: UICollectionViewCell { override init(frame: CGRect) { super.init(frame: frame) setupViews() } let imageView: UIImageView = { let iv = UIImageView() iv.contentMode = .scaleAspectFill iv.backgroundColor = .yellow iv.image = UIImage(named: "page1") return iv }() func setupViews() { backgroundColor = .blue addSubview(imageView) // 关键:关闭自动约束转换 imageView.translatesAutoresizingMaskIntoConstraints = false // 批量激活四个方向的约束 NSLayoutConstraint.activate([ imageView.topAnchor.constraint(equalTo: self.topAnchor), imageView.bottomAnchor.constraint(equalTo: self.bottomAnchor), imageView.leadingAnchor.constraint(equalTo: self.leadingAnchor), imageView.trailingAnchor.constraint(equalTo: self.trailingAnchor) ]) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
方式2:单个激活约束
如果需要单独控制某个约束的开关,可以用这种方式:
func setupViews() { backgroundColor = .blue addSubview(imageView) imageView.translatesAutoresizingMaskIntoConstraints = false // 逐个激活约束 imageView.topAnchor.constraint(equalTo: topAnchor).isActive = true imageView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true imageView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true imageView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true }
额外提示
如果你想给图片和cell之间留间距,只需要在约束里加上constant参数即可,比如上下左右各留10pt:
imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10)
内容的提问来源于stack exchange,提问作者satp42
相关产品推荐
相关产品推荐

