隐藏带有子视图的彩色边框

时间:2019-05-23 13:05:02

标签: ios swift calayer

我有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 个答案:

答案 0 :(得分:1)

您可以执行此操作而无需在其上方添加其他视图。 通过将您的文本字段委托设置为self然后

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

如果我不明白你的意思,请澄清

答案 1 :(得分:1)

您已设置lbl.backgroundColor = Theme.Color.clear.value。 这就是为什么您可以看到边框的原因。将标签的背景色设置为与视图背景色相同。

答案 2 :(得分:0)

您需要确保正在发生两件事:

  • UILabel在视图层次结构中位于UITextField的前面

这可以在XIB文件(故事板)中设置,也可以通过编程方式设置:

enter image description here

在XIB中,取决于视图在列表中的位置,确定其优先级。列表中的位置越高,背面就越远。因此,您希望将标签移动到UITextField下方。您可以将其拖放到左侧列表中。

您还可以通过将textField推到层次结构的后面来以编程方式进行设置:

sendSubviewToBack(UITextField)
  • UILabel具有背景色

这也可以通过编程方式或在XIB中设置:

以编程方式:

label.backgroundColor = .red

XIB:

enter image description here

检查这两件事将确保UILabel位于UITextField的前面,并在包含文本时覆盖边框。