提问人:R. Mohan 提问时间:6/11/2020 最后编辑:R. Mohan 更新时间:6/11/2020 访问量:745
UIImageView 帧未正确放置在父 ImageView 上
UIImageView frame not placing correctly on the parent ImageView
问:
我有一个调色板 imageview,因为我想根据我从后端获得的 x 轴和 y 轴放置一个加号图标 (imageView)。如果我得到 x = 0 和 y = 0,则加号的帧放置正确
对于 y 轴,如果我将调色板 imageView 的高度设置为加号图标的框架的 y 轴,则图标不会变为实际 (0,0)
我使用的代码如下
let cWidth = self.colorPalleteImageView.frame.size.width // 348
let cHeight = self.colorPalleteImageView.frame.size.height // 378.5
let imageView = UIImageView(image: appImages.roundPlusIcon.image)
imageView.frame = CGRect(x: 0, y: cHeight, width: 22, height: 22)
colorPalleteImageView.addSubview(imageView)
我正在用 iPad 12.9 英寸模拟器检查这一点。我是否缺少任何东西来实现 x=0 和 y=0,如果我将 colorPaletteImage 的宽度提供给 plusIconImageView 的 x 轴,它不会在 x 轴上结束,它停留在 imageview 宽度的结束之前,我不知道为什么会这样,需要帮助
答:
imageView.frame = CGRect(x: cWidth, y: cHeight, width: 22, height: 22)
桅杆是:
imageView.frame = CGRect(x: 0, y: 0, 宽度: 22, 高度: 22)
作为轴是:
0.0-----------------> 倍
|▢
|
|
|
V
使用 0,0 时,您将小图像的左上角放在大图像的左上角。
评论
您可以通过将属性修改为超级视图的边界高度来解决此问题。您需要知道两者之间的区别,并了解为什么会发生这种情况。简单来说,框架是相对于其超级视图的 CGRect,边界是相对于其自身坐标的 CGRect。
网上有很多详细的解释,只需要谷歌框架与界限,在你玩了很多次之后,你就会习惯这两个。
以下是解决此问题的方法。height
frame
bounds
CGRect
let cHeight = self.colorPalleteImageView.bounds.size.height
评论
colorPalleteImageView.addSubview(imageView)
colorPalleteImageView.superview?.addSubview(imageView)
不好意思。。我回来了
我做到了(为了遵循你的代码,我强制了值..)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var colorPalleteImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let v = self.view
print(v!.frame)
let cHeight = CGFloat(378.5)
colorPalleteImageView.frame.size.width = 348
colorPalleteImageView.frame.size.height = cHeight
let plusImg = UIImage(named: "plus")
let imageView = UIImageView(image: plusImg)
imageView.frame = CGRect(x: 0, y: cHeight-22, width: 22, height: 22)
colorPalleteImageView.addSubview(imageView)
}
}
我得到了:(在iPad上)
评论
在通过自动布局完成帧设置之前,您正在使用帧大小。
我建议使用约束,但如果你想坚持帧坐标......
- 添加“圆形加号”图标 imageView in
viewDidLoad()
- 将其设置为 IN 或
frame.origin
viewDidLayoutSubviews()
viewDidAppear()
评论
viewDidLoad()
viewWillAppear()