setup func 无法更改 viewController 中的 backgroundColor

setup func can't change backgroundColor in a viewController

我实际上是用它从 ViewController 切换到另一个

    let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "addhoraire") as! Addhoraire
    self.present(vue, animated: true, completion: nil)

有时我想在向用户显示视图之前更改一些内容,所以在 VC 中我会做一个 func。像这样

// header and cercle.exemple are outlets of a UIView
    public func setup(selectedDay : String){
        loadViewIfNeeded()
        self.selectedDay = selectedDay
        print("jour selectionné : " + self.selectedDay)
        self.header.backgroundColor = UIColor.brown
        self.profTextField.backgroundColor = UIColor.yellow
        self.cercleExemple.backgroundColor = UIColor.yellow
    }

当我现在想切换时,我会这样做:

    let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "addhoraire") as! Addhoraire
    vue.setup(selectedDay: selectedDayinHoraire)
    self.present(vue, animated: true, completion: nil)

所以它将切换新的 VC 并按照我的意愿执行设置,文本字段颜色已更改,cercleExemple 也已更改,但 header 不会。 view.backgroundColor,同样的问题......但如果我在同一个地方做 header.isHidden = true 它工作。所以它只是拒绝改变颜色

header 和视图 bgcolor 仅在 ViewDidAppear 中发生变化。我不明白为什么。自从我发现这个错误已经一个星期了,它让我发疯......

您正在尝试在视图加载之前设置视图,将需要设置的信息保存在变量中并在 setup 中设置,然后在 viewDidLoad 被调用时,设置来自那些变量。

正如 Adrian 提到的,您需要等到视图加载后再对其进行更改。您是否尝试过在您的视图控制器中覆盖 viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()

    // Do stuff here
    self.header.backgroundColor = UIColor.brown
    // ...additional view configuration
}

如果您无法在 viewDidLoad() 中执行此操作,您也可以尝试在 viewWillAppear() 方法中进行 UI 更改,而不是等到 viewDidAppear()

我发现了问题,但不知道根本原因。这似乎是一个 Apple 错误。出现此问题是因为在 Storyboard 中您使用 Assets.xcassets 目录 (LightSideMenu) 中的颜色设置页眉的背景颜色。如果不是从 Assets.xcassets 中选择颜色,而是使用 RGB 滑块或输入十六进制值 #2A6D9E 手动设置页眉的背景颜色,那么页眉的背景颜色将 被覆盖。另外,请确保您没有在 viewWillAppearviewDidAppear 等其他地方重置它,因为它们将在您的 func setup(selectedDay : String) 方法之后调用。