将UIImageView设置为背景-Swift 4

时间:2018-09-23 15:40:13

标签: swift uiimageview

我想在视图中已存在的所有内容后面设置背景图像。

我尝试过:

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答案(这是我从上面获得代码的地方),但是我没有运气。

我的文件夹结构如下:

here

我的图像位于Assets.xcassets文件夹中。

更新: 我重新启动了Xcode,我的代码正常了。

2 个答案:

答案 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.xcassetspng文件中,则指定扩展名是可选的。

有时候,您所需要做的只是清理构建文件夹 K ,或者只是重新启动Xcode。