看起来您从未为UIImageView(或MyView)建立过任何自动布局约束。因此,我的猜测是,即使显示UIView的背景色,imageView的框架也为0高0宽。当运行应用程序时,在Xcode中使用“调试视图层次结构”选项时,您应该能够看到这一点。
下面是一个调整代码以包括视图和imageView的自动布局约束的示例,这应该允许图像正确显示。
编辑:以编程方式设置视图时,它们将默认使用自动调整遮罩(弹簧和支柱),并将其转换为自动布局约束。若要设置程序化自动布局约束而不使其与自动保留掩码冲突(转换为自动布局约束),您需要通过设置禁用将授权掩码转换为自动布置约束
translatesAutoresizingMaskIntoConstraints
到
false
在目标视图上。
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
}
}
结果是: