SubView добавлен в View, но не отображается

Я пытаюсь показать подпредставление, которое было добавлено в представление, но оно не отображается при нажатии кнопки.

Я попытался установить isOpaque на 1, alpha на 1, isHidden на false (без необходимости нажимать кнопку) и проверил, что я запустил view.addSubview(). Я также обнаружил, что подвид вообще не скрыт, а фон белый (он должен быть синим или красным).

код для добавления подвидов

//setup
viewBGKRect = CGRect(x: 20, y: 20, width: 984, height: 660)
viewBGK = UIView(frame: viewBGKRect)
viewBGK.backgroundColor = UIColor(red: 139.0, green: 206.0, blue: 231.0, alpha: 1.0)
viewBGK.alpha = 1
viewBGK.isOpaque = true

viewRGKRect = CGRect(x: 20, y: 20, width: 984, height: 660)
viewRGK = UIView(frame: viewRGKRect)
viewRGK.backgroundColor = UIColor(red: 240.0, green: 177.0, blue: 187.0, alpha: 1.0)
viewRGK.alpha = 1
viewRGK.isOpaque = true

//isHidden is set to false when the buttons are pressed
viewBGK.isHidden = true
viewRGK.isHidden = true

view.addSubview(viewBGK)
view.addSubview(viewRGK)

код для отображения подвидов

@IBAction func goalkeeper(_ sender: UIButton) {
        switch sender.tag {
        case 0:
            // blue
            viewBGK.isHidden = false
            viewRGK.isHidden = true
            return
        default:
            viewBGK.isHidden = true
            viewRGK.isHidden = false
            return
        }
    }

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


person Jonathan Tan    schedule 02.09.2019    source источник
comment
Где вы поместили код для добавления подвидов? viewDidLoad? Кроме того, какой вид не показывает? Синий или красный или оба?   -  person Sweeper    schedule 02.09.2019


Ответы (2)


Неважно, я нашел ответ: UIColor RGB от 0 до 1, а не от 0 до 255, цвета должны быть

(синий)

UIColor(red:0.55, green:0.81, blue:0.91, alpha:1.0)

и

(красный)

UIColor(red:0.94, green:0.69, blue:0.73, alpha:1.0)

нет

(синий)

UIColor(red: 139.0, green: 206.0, blue: 231.0, alpha: 1.0)

и

(красный)

UIColor(red: 240.0, green: 177.0, blue: 187.0, alpha: 1.0)

Я чувствую себя действительно глупо сейчас.

person Jonathan Tan    schedule 02.09.2019
comment
Вы проделали огромную работу, найдя ответ самостоятельно. Вот еще один способ получить цвета без выполнения всей математики для получения десятичной дроби: youtube.com/ смотреть?v=kTiL4Xtwg84 - person Adrian; 02.09.2019
comment
молодец, нашел решение своего вопроса. Если это работает, вы должны отметить это как ответ. - person chirag90; 02.09.2019

Если вы собираетесь использовать пользовательские цвета, может быть проще объявить их где-нибудь, кроме контроллера представления. Одним из подходов было бы объявить их в расширении. Для этого вы должны сделать следующее:

  1. Создайте новый файл Swift и назовите его UIColor+Extension.swift.

  2. Внутри нового файла добавьте следующий код:

    extension UIColor {
        static var customBlue: UIColor {
            return #colorLiteral(red: 0.5450980392, green: 0.8078431373, blue: 0.9058823529, alpha: 1)
        }
    
        static var customRed: UIColor {
            return #colorLiteral(red: 0.9411764706, green: 0.6941176471, blue: 0.7333333333, alpha: 1)
        }
    }
    

Я не печатал эти цвета. Я просто набрал return Color Literal, и он показал белый прямоугольник со скругленными углами. Когда я нажал на прямоугольник, я увидел это:

введите здесь описание изображения

Затем я нажал кнопку «Другое» и ввел значения RGB:

введите здесь описание изображения

Наконец, вы хотите избежать написания повторяющегося кода (DRY = не повторяйтесь). Вот обновленный код:

//setup
viewBGKRect = CGRect(x: 20, y: 20, width: 984, height: 660)
viewBGK = UIView(frame: viewBGKRect)
viewBGK.backgroundColor = .customBlue

viewRGKRect = CGRect(x: 20, y: 20, width: 984, height: 660)
viewRGK = UIView(frame: viewRGKRect)
viewRGK.backgroundColor = .customRed

[viewBGK, viewRGK].forEach { view in
    view.alpha = 1
    view.isOpaque = true
    //isHidden is set to false when the buttons are pressed
    view.isHidden = true
}
person Adrian    schedule 02.09.2019