以前在ios 10上我有以下代码,这对我来说非常合适。 我刚刚用UIImage + UIView添加了具有特定颜色的UIView。在ios 11上测试之后,我发现有些屏幕在其余的UI元素上面有这个ImageView,所以它有什么错误
override func viewDidLoad() {
super.viewDidLoad()
configureView()
}
func configureView() {
view.backgroundColor = UIColor.clear
let backgroundImage = getBackgroundImage()
view.addSubview(backgroundImage)
view.sendSubview(toBack: backgroundImage)
}
func getBackgroundImage() -> UIView {
let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
backgroundImage.image = UIImage(named: "lemons")
backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
let backgroundView = UIView(frame: UIScreen.main.bounds)
backgroundView.backgroundColor = black
backgroundImage.addSubview(backgroundView)
return backgroundImage
}
答案 0 :(得分:0)
如果您以编程方式创建视图控制器(意味着没有故事板或笔尖),您可以非常简单地添加背景图像:
class SomeViewController: UIViewController {
override func loadView() {
view = UIView()
view.frame = UIScreen.main.bounds
setBackground()
}
func setBackground() {
// set image
let bg = UIImageView()
bg.image = // some UIImage
bg.frame = view.bounds
bg.contentMode = .scaleAspectFill
bg.clipsToBounds = true
view.insertSubview(bg, at: 0)
// set tint
let tint = UIView()
tint = view.bounds
tint = UIColor.red
tint = 0.5
view.insertSubview(tint, at: 1)
}
}
请记住,以编程方式创建视图控制器时,必须创建视图控制器的实际视图,即view = UIView()
。此外,“核心”任务,如设置背景图像,应该在loadView
和“完成触摸”任务中完成,或者在视图控制器将自身完全加载到内存后要执行的任务应该完成在viewDidLoad
执行。当然,配置视图控制器的视图属性绝对不应该留在最后。
答案 1 :(得分:0)
将session_start()
来自configureView()
的{{1}}移至viewDidLoad
。后者不方便,因为它在视图控制器的生命周期中被多次调用,所以使用Bool属性进行检查,这样你只需要调用viewWillLayoutSubviews
一次 ,这是第一次。
答案 2 :(得分:0)
迅速4:
最好将其保留在助手类中:
static func setBlurBackGround(_ vc:UIViewController){
let imageView = UIImageView()
imageView.image = #imageLiteral(resourceName: "BackGround")
imageView.frame = dBounds
vc.view.addSubview(imageView)
}