我有uiview
带有彩色边框。我想在上面添加一个子视图,以便它“隐藏”父视图边框。目前,当我尝试在上面添加视图(UILabel的子类)时,它没有与我想要的重叠。我想要的是与标签框架互动时删除白线。
我的课是:
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
}
}
答案 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)
您需要确保正在发生两件事:
这可以在XIB文件(故事板)中设置,也可以通过编程方式设置:
在XIB中,取决于视图在列表中的位置,确定其优先级。列表中的位置越高,背面就越远。因此,您希望将标签移动到UITextField下方。您可以将其拖放到左侧列表中。
您还可以通过将textField推到层次结构的后面来以编程方式进行设置:
sendSubviewToBack(UITextField)
这也可以通过编程方式或在XIB中设置:
以编程方式:
label.backgroundColor = .red
XIB:
检查这两件事将确保UILabel位于UITextField的前面,并在包含文本时覆盖边框。