swift - 将 UIImageView 设置为背景 - Swift 4
问题描述
我想在视图中已经存在的所有内容后面设置背景图像。
我试过了 :
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,我的代码工作了。
解决方案
设置子视图的框架viewDidLoad
不是一个好习惯,因为此时子视图还没有正确放置。您应该在viewDidLayoutSubviews
self.view 之后调用子视图的框架,并且它的子视图布局正确。
你的视图控制器:
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
}
推荐阅读
- python-3.x - Pytrends 仅在美国的城市级别实施(并且没有地理编码)
- python-3.x - python中的if语句,jupyter Notebbok中显示语法错误
- javascript - 排除 RegEx 模式中仅由制表符组成的空格
- reactjs - 在反应中渲染firestore时间戳
- javascript - 拉取标题并以列表格式显示在 div 中
- java - 两个字符串之间的等于运算符或函数未在 JAVA 中正确验证
- android - 无法从 Fragment 中更新 TableLayout
- javascript - req.body 在 express 应用的 post 路由中未定义
- amazon-web-services - 模块内部未识别 Terraform 子网详细信息
- flutter - Flutter DistanceMatrix JSON 无法正确解析