我想在视图中已存在的所有内容后面设置背景图像。
我尝试过:
override func viewDidLoad() {
super.viewDidLoad()
let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
backgroundImage.image = UIImage(named: "bg-img")
backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
self.view.insertSubview(backgroundImage, at: 0)
}
但是它不起作用(甚至都没有添加img)。因此,我导入了ImageView组件并使用Xcode GUI添加了图像,它确实添加了图像,但它位于一切之上。我已经尝试了几个Stack Overflow答案(这是我从上面获得代码的地方),但是我没有运气。
我的文件夹结构如下:
我的图像位于Assets.xcassets文件夹中。
更新: 我重新启动了Xcode,我的代码正常了。
答案 0 :(得分:4)
在viewDidLoad
中设置子视图的框架不是一个好习惯,因为此时子视图尚未正确放置。您应该在viewDidLayoutSubviews
中设置子视图的框架,该框架将在self.view及其子视图正确放置后调用。
您的ViewController:
var backgroundImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.backgroundImage = UIImageView(image: UIImage(named: "bg-img"))
self.backgroundImage.contentMode = .scaleAspectFill
self.view.insertSubview(self.backgroundImage, at: 0)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.backgroundImage.frame = self.view.bounds
}
答案 1 :(得分:1)
您要做的就是提供jpg图片的全名:
backgroundImage.image = UIImage(named: "bg-img.jpg")
如果将其放置在Assets.xcassets
或png
文件中,则指定扩展名是可选的。
有时候,您所需要做的只是清理构建文件夹⇧ ⌘ K ,或者只是重新启动Xcode。