swift - 如何快速将图像居中到它位于上方的图像的中心
问题描述
我有一个以编程方式将图像添加到另一个图像顶部的函数。我的问题是位于顶部的图像没有正确居中..它略微偏离中心。我究竟做错了什么?
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)
}
}
解决方案
tldr:在没有激活约束的情况下添加子视图并不酷,因为任何 UI 更改(例如,设备旋转)都会在没有激活约束的情况下调用添加的视图的不可预测行为。
事实上,您的方法包括以下步骤:
- 您初始化一些视图并以编程方式准备其首选项。
- 定义一个硬编码的帧,不保证在未来的将来。
- 只是添加了它。
与其硬编码框架,不如根据约束自动定义框架。你可以像下面这样:
- 初始化然后为您的子视图准备所有首选项。
- 将其添加到视图的父级。
- 并定义约束,然后激活它们:
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)
])
}
推荐阅读
- kubernetes - Kubernetes 无法在集群范围内创建命名空间
- android - 如何在android中快速响应接收来自socket的数据[关闭]
- c# - 表单面板调整大小
- python - 意外影响结果的执行顺序
- javascript - 在不重新加载页面的情况下覆盖 location.search javascript
- javascript - 如何在angularjs中访问被点击元素的内容
- geometry - Meshlab 能否判断一个点是否在网格内
- firebase - 无法从 HttpClient 传递参数,但能够从邮递员传递
- android - 以编程方式创建的可绘制对象未在 imageview 中显示
- python - 将字典值(数组)转换为列表