【问题标题】:Best practices to add background image in all ViewControllers swift ios 11在所有 ViewControllers swift ios 11 中添加背景图像的最佳实践
【发布时间】:2017-09-28 17:50:27
【问题描述】:

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

【问题讨论】:

    标签: ios iphone swift uiview


    【解决方案1】:

    如果您以编程方式创建视图控制器(意味着没有故事板或 nib),您可以像这样非常简单地添加背景图像:

    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 中完成,而“finishing-touch”任务,或者您想要在视图控制器完全加载到内存后执行的任务,应该执行在viewDidLoad。当然,配置视图控制器的视图属性绝对不能留到最后。

    【讨论】:

    • 谢谢你,我会试试你的方法——这么多编码的原因——是我想在uiImage之上放置半透明视图。而且我并不总是以编程方式创建 viewContorller,也许只有少数以编程方式创建,其余来自情节提要,这可能是一团糟
    • 我更新了答案以包含一个色调层。只要您在 0 处插入图像,在 1 处插入色调层,其他所有内容都将添加到它们之上。在我看来,让你的代码尽可能地模块化也是一种更好的做法。因此,不要尝试将图像和色调层合并到一个视图中,而是将它们分开,这样可以更轻松地进行未来的编辑,并且更容易发现错误。
    【解决方案2】:

    configureView() 呼叫从viewDidLoad 移动到viewWillLayoutSubviews。后者的不便之处在于它在视图控制器的生命周期中被多次调用,因此使用 Bool 属性进行检查,这样您就只调用configureView()一次,第一次。

    【讨论】:

      【解决方案3】:

      斯威夫特 4:

      最好将它保存在辅助类中:

      static func setBlurBackGround(_ vc:UIViewController){
              let imageView = UIImageView()
              imageView.image = #imageLiteral(resourceName: "BackGround")
              imageView.frame = dBounds
              vc.view.addSubview(imageView)
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多