Как определяется итоговый цвет экрана в iOS‑приложении

При обычном отображении непрозрачный testView перекрывает родителя, и видна жёлтая область его слоя. Чёрный фон родителя виден только вне этой области.

Короткий ответ

Что ответить на собеседовании

При обычном отображении непрозрачный testView перекрывает родителя, и видна жёлтая область его слоя. Чёрный фон родителя виден только вне этой области.

Подробный разбор

Ответ с пояснениями

Условие

В данном примере нужно понять, какой цвет в итоге будет виден пользователю на экране и почему именно он отображается. Обратите внимание на порядок установки свойств backgroundColor у UIView и его слоя, а также на то, как эти свойства взаимодействуют с аналогичными параметрами у корневого представления view.

func viewDidLoad() {
    super.viewDidLoad()

    let testView = UIView()
    view.addSubview(testView)
    testView.frame = view.bounds

    testView.backgroundColor = .red
    testView.layer.backgroundColor = UIColor.yellow.cgColor
    view.backgroundColor = .green
    view.layer.backgroundColor = UIColor.black.cgColor
}

Ответ

При обычном отображении непрозрачный testView перекрывает родителя, и видна жёлтая область его слоя. Чёрный фон родителя виден только вне этой области.

Внутри testView сначала задаётся красный фон UIView, затем непосредственно устанавливается жёлтый backgroundColor его backing layer. Аналогично слой корневого view получает чёрный после зелёного. Родительский фон не перекрашивает расположенный поверх него дочерний слой. Это предполагает ненулевые размеры, opacity/alpha по умолчанию и отсутствие дальнейших изменений UIKit. Однократный frame = view.bounds не обеспечивает последующий resize: используйте constraints или autoresizing. В переопределении UIViewController метод также должен иметь override.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее