我正在为这样的视图添加边框:
extension UIView {
func addTopBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.cgColor
border.frame = CGRect(x:0,y: 0, width:self.frame.size.width, height:width)
self.layer.addSublayer(border)
}
}
在viewDidLoad中:
textLbl.addTopBorderWithColor(color: UIColor.white, width: 1)
在viewWillAppear中:
textLbl.text = "placeholder text \(variableLengthText)"
如何使用上述扩展程序解除我绘制的边框?
答案 0 :(得分:0)
在其他视图(例如工具栏)中,作为一个草率的黑客,我只会在边框上写一个与对象的背景颜色匹配的边框,这样它就不会重叠(例如在屏幕方向改变时)
嗯,这总是错的,所以要做的第一件事就是停止这样做。
这与viewDidDisappear
或viewWillAppear
无关。视图正在改变大小的信号是它的layoutSubviews
被调用。因此,您可以实现layoutSubviews
以删除边框图层并添加新尺寸的新图层。
但是在标签上添加子视图会更好,包括除边框之外的清晰背景。这样,可以使用约束来配置子视图,以便与标签一起自动增长和缩小,而无需任何代码。这是一个演示该实现的截屏视频;红线是右边界:
答案 1 :(得分:0)
虽然@ matt的故事板解决方案看起来很优雅,但我无法实现它。然而,我确实通过在扩展中设置layer.name字段并在ViewWillLayoutSubviews中检查它来使其工作
extension UIView {
func addTopBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.cgColor
border.frame = CGRect(x:0,y: 0, width:self.frame.size.width, height:width)
border.name = "topBorder"
self.layer.addSublayer(border)
}
在ViewWillLayoutSubviews
我致电:
if self.textLbl.layer.sublayers != nil {
for layer in textLbl.layer.sublayers! {
if layer.name == "rightBorder" || layer.name == "leftBorder" || layer.name == "topBorder" {
layer.removeFromSuperlayer()
}
}
}
在ViewDidLayoutSubviews
我致电:
textLbl.addTopBorderWithColor(color: UIColor.white, width: 1.5)