首页 > 解决方案 > 当我以编程方式使用锚点时,为什么 ImageView 的位置错误?

问题描述

每个人。我使用锚以编程方式构建的集合视图单元存在问题。

细胞

private lazy var iconView: UIImageView =  {
    let image = UIImageView()
    image.translatesAutoresizingMaskIntoConstraints = false
    image.clipsToBounds = true
    return image
}()
private lazy var label: UILabel = {
    let label = UILabel()
    label.numberOfLines = 2
    label.font = NeoSansPro.regular.of(size: 12)
    label.textAlignment = .center
    label.translatesAutoresizingMaskIntoConstraints = false
    label.sizeToFit()
    return label
}()

配置锚点

 override func layoutSubviews() {
        super.layoutSubviews()
        setupUI()
    }
    
    
    func setupUI() {
        NSLayoutConstraint.activate( [
            iconView.heightAnchor.constraint(equalToConstant: 32),
            iconView.widthAnchor.constraint(equalToConstant: 32),
            iconView.centerXAnchor.constraint(equalTo: centerXAnchor, constant: 0),
            iconView.centerYAnchor.constraint(equalTo: centerYAnchor, constant: -16),
            
            label.topAnchor.constraint(equalTo: iconView.bottomAnchor, constant: 8),
            label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 4),
            label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 4),
            label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 4),
        ])
        
    }

结果 1 和 9 单元格的在此处输入图像描述图像位置和标签宽度错误,最大的单元格宽度。

标签: iosswiftuicollectionviewautolayoutuicollectionviewcell

解决方案


首先添加视图,然后添加约束它将起作用。

在此处输入图像描述

private lazy var iconView: UIImageView =  {
    let image = UIImageView()
    image.translatesAutoresizingMaskIntoConstraints = false
    image.image = UIImage(named: "1")
    return image
}()
override func awakeFromNib() {
    super.awakeFromNib()
    backView.layer.cornerRadius = 5
    self.contentView.addSubview(iconView)
    setUpView()
}

func setUpView() {
    NSLayoutConstraint.activate( [
        iconView.heightAnchor.constraint(equalToConstant: 40),
        iconView.widthAnchor.constraint(equalToConstant: 40),
        iconView.centerXAnchor.constraint(equalTo: self.contentView.centerXAnchor, constant: 0),
        iconView.centerYAnchor.constraint(equalTo: self.contentView.centerYAnchor, constant: -16)
    ])
}

推荐阅读