Скрыть цветную рамку с подпредставлением - PullRequest
0 голосов
/ 23 мая 2019

у меня uiview с цветной рамкой. Я хочу добавить подпредставление выше, чтобы оно «скрывало» границу родительского вида. В настоящее время, когда я пытаюсь добавить представление (подкласс UILabel) выше, это не перекрывает что-либо, как я хочу. Что я хочу, так это удалить белую линию, когда она взаимодействует с рамкой метки.

enter image description here

Мой класс:

class LabeledContainerView: UIView {

  var text: String!
  var height: CGFloat!
  var offset: CGFloat!

  var label: UILabel = {
    let lbl = LabelSL.create(textColor: Theme.Color.white,
                               font: Theme.Font.regular())
    lbl.text = Strings.login.value
    lbl.backgroundColor = Theme.Color.clear.value
    return lbl
  }()

  init(text: String,
       height: Double,
       offset: Double) {
    super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    self.text = text
    self.height = CGFloat(height)
    self.offset = CGFloat(offset)
    createUI()
    setConstraints()
  }

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }

  func highlight(){

  }

  func turnOffHighlight(){

  }

  private func createUI(){
    translatesAutoresizingMaskIntoConstraints = false
    clipsToBounds = false
    layer.cornerRadius = 4.0
    layer.borderColor = UIColor.white.cgColor
    layer.borderWidth = 2.0
    addSubview(label)
  }

  private func setConstraints(){
    let tinyOffset: CGFloat = 2

    label.leftAnchor.constraint(equalTo: leftAnchor, constant: offset + tinyOffset).isActive = true
    label.centerYAnchor.constraint(equalTo: topAnchor).isActive = true
  }
}

Ответы [ 3 ]

1 голос
/ 23 мая 2019

Вы установили lbl.backgroundColor = Theme.Color.clear.value.Вот почему вы можете увидеть границу.Установите цвет фона метки так же, как цвет фона вашего просмотра.

1 голос
/ 23 мая 2019

Вы можете сделать это, не добавляя другой вид над ним.Установив для своего делегата текстового поля значение self

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField.text?.isEmpty ?? false{
        //yourView.hideBorders
    }
}

Если я не получил вашу точку зрения, уточните

0 голосов
/ 24 мая 2019

Необходимо убедиться, что происходят две вещи:

  • UILabel находится перед UITextField в иерархии представлений

Это можно установить в XIBфайл (раскадровка) или программно:

enter image description here

В XIB в зависимости от того, где находится представление в списке, определяется его приоритет.Чем оно выше в списке, тем дальше назад.Поэтому вы хотите, чтобы ваш ярлык был ниже вашего UITextField.Вы можете перетащить его в список слева.

Вы также можете установить это программно, переместив текстовое поле в конец иерархии:

sendSubviewToBack(UITextField)
  • UILabel имеетцвет фона

Это также можно установить программно или в XIB:

Программно:

label.backgroundColor = .red

XIB:

enter image description here

Проверка этих двух вещей гарантирует, что UILabel находится перед UITextField и закрывает границу, когда у него есть текст.

...