在所有ViewControllers中添加背景图像的最佳实践swift ios 11

时间:2017-09-28 17:50:28

标签: ios iphone swift uiview

以前在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
}

3 个答案:

答案 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)
    }