首页 > 解决方案 > 如何快速将图像居中到它位于上方的图像的中心

问题描述

我有一个以编程方式将图像添加到另一个图像顶部的函数。我的问题是位于顶部的图像没有正确居中..它略微偏离中心。我究竟做错了什么?

    func imageCheck() {
        if pickedImage != nil {
            addPainting()
        } else {
            print("image did not come back from uploadVC.")
        }
    }
    
    
    func addPainting() {
        let pickedImageView = UIImageView(image: pickedImage)
        pickedImageView.frame = CGRect(x: 0, y:0, width: 150, height: 150)
        pickedImageView.contentMode = .scaleAspectFit
        pickedImageView.center = userPickedRoom.center // userPickedRoom is the image that sits beneath pickedImage
        view.addSubview(pickedImageView)
    }
}

标签: swift

解决方案


tldr:在没有激活约束的情况下添加子视图并不酷,因为任何 UI 更改(例如,设备旋转)都会在没有激活约束的情况下调用添加的视图的不可预测行为。

事实上,您的方法包括以下步骤:

  1. 您初始化一些视图并以编程方式准备其首选项。
  2. 定义一个硬编码的帧,不保证在未来的将来。
  3. 只是添加了它。

与其硬编码框架,不如根据约束自动定义框架。你可以像下面这样:

  1. 初始化然后为您的子视图准备所有首选项。
  2. 将其添加到视图的父级。
  3. 并定义约束,然后激活它们:
func addPainting() {
    let pickedImageView = UIImageView(image: pickedImage)
    pickedImageView.contentMode = .scaleAspectFit
    view.addSubview(pickedImageView)
    pickedImageView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        pickedImageView.centerXAnchor.constraint(equalTo: userPickedRoom.centerXAnchor),
        pickedImageView.centerYAnchor.constraint(equalTo: userPickedRoom.centerYAnchor),
        pickedImageView.widthAnchor.constraint(equalToConstant: 150),
        pickedImageView.heightAnchor.constraint(equalToConstant: 150)
    ])
}

推荐阅读