我有一个 UIViewController,其中我将 UIIView 设置为子视图以在其中保存 UIImage
class MyVIewController: UIViewController {
let myView = MyView()
override func viewDidLoad() {
super.viewDidLoad()
myView.translatesAutoresizingMaskIntoConstraints = false
myView.backgroundColor = .systemPink
view.addSubview(myView)
}
@objc func changeImageFunc(_ sender: Any) {
//...extra code assigned .image (savedImage)
myView.setImage(savedImage)
}
class MyView: UIView {
var imageView: UIImageView
override init(frame: CGRect) {
imageView = UIImageView()
super.init(frame: frame)
addSubview(imageView)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setImage(_ image: UIImage) {
// Set the image for the internal UIImageView
imageView.image = image
}
}
我尝试像这样直接在
imageView
中分配 chaneImageFunc
属性
myView.imageView.image = savedImage
但也没有用。如何将我的
myView
类中保存的图像显示到 MyViewController
上
看起来您从未为 UIImageView (或 MyView )建立任何自动布局约束。因此,我的猜测是,即使 UIView 的背景颜色显示,imageView 的框架也是 0 高度和 0 宽度。在运行应用程序时使用 Xcode 中的“调试视图层次结构”选项时,您应该能够看到这一点。
这是一个调整代码以包含视图和 imageView 的自动布局约束的示例,这应该允许图像正确显示:
class MyViewController: UIViewController {
let myView = MyView()
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidLoad()
myView.translatesAutoresizingMaskIntoConstraints = false
myView.backgroundColor = .systemPink
view.addSubview(myView)
myView.widthAnchor.constraint(equalToConstant: 50).isActive = true
myView.heightAnchor.constraint(equalToConstant: 50).isActive = true
myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@IBAction @objc func changeImageFunc(_ sender: Any) {
// just an example image
let image = UIImage(systemName: "eraser")!
myView.setImage(image)
}
}
import UIKit
class MyView: UIView {
var imageView: UIImageView
override init(frame: CGRect) {
imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
super.init(frame: frame)
addSubview(imageView)
imageView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
imageView.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true
imageView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
imageView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setImage(_ image: UIImage) {
// Set the image for the internal UIImageView
imageView.image = image
}
}
结果是: