Функция установки не может изменить backgroundColor в 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 тоже, но заголовок не будет. view.backgroundColor, та же проблема... но если я делаю в том же месте header.isHidden = true, это работает. Так что просто отказывайтесь менять цвет

заголовок и вид bgcolor изменяются только в ViewDidAppear, Я не понимаю почему. Прошла неделя с тех пор, как я был на этой ошибке, это сводит меня с ума...

3 ответа

Решение

Я обнаружил проблему, но понятия не имею о коренной причине. Кажется, это может быть Apple ошибка. Проблема возникает, потому что в раскадровке вы устанавливаете цвет фона заголовка, используя цвет из Assets.xcassets каталог (LightSideMenu). Если вместо выбора цвета из Assets.xcassets Вы вручную устанавливаете цвет фона заголовка, используя RGB ползунки или введя шестнадцатеричное значение #2A6D9E, тогда цвет фона вашего заголовка не будет переопределен. Кроме того, убедитесь, что вы не сбрасываете его в другом месте, как в viewWillAppear или же viewDidAppear как они будут называться после вашего func setup(selectedDay : String) метод.

Вы пытаетесь настроить представление до его загрузки, сохраните информацию, которую необходимо установить, в переменной и установите в setup, и когда viewDidLoad вызывается, установить информацию из этих переменных.

Как упоминал Адриан, вам нужно подождать, пока представление загрузится, прежде чем вносить в него изменения. Вы пытались переопределить viewDidLoad() по вашему мнению контроллер?

override func viewDidLoad() {
    super.viewDidLoad()

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

Если вы не можете сделать это в viewDidLoad()Вы также можете попробовать внести изменения в пользовательский интерфейс в viewWillAppear() метод, а не ждать, пока viewDidAppear(),

Другие вопросы по тегам