我在这里使用代码为我的标签创建边框:
扩展名CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness)
break
case UIRectEdge.bottom:
border.frame = CGRect(x: 0, y: self.frame.height - thickness, width: self.frame.width, height: thickness)
break
case UIRectEdge.left:
border.frame = CGRect(x: 0, y: 0, width: thickness, height: self.frame.height)
break
case UIRectEdge.right:
border.frame = CGRect(x: self.frame.width - thickness, y: 0, width: thickness, height: self.frame.height)
break
default:
break
}
border.backgroundColor = color.cgColor;
self.addSublayer(border)
}
}
然而,当我将它添加到我的图层时,这就是我得到的:正如您所看到的,宽度完全混乱并且frame.width不准确。
我不确定为什么会这样。我没有在故事板中设置宽度,因为我希望标签适用于所有手机宽度。
提前感谢您的帮助!
答案 0 :(得分:0)
当CALayer
对应UIView
时,layoutSubviews
不会自动调整大小。
您需要覆盖UIView
中的override func layoutSubviews() {
super.layoutSubviews()
...resize layer or redraw borders here...
}
并更新边框宽度/高度
BorderedLabel
您可以创建一个UILabel
UITableViewCell
的子类,为您处理所有这些逻辑。
修改强>
如果您不想处理创建BorderedLabel
的子类并添加自己的label.text="4517 Bedford..."
视图,则可能需要在设置边框之前强制布局。
我只是在猜测,因为您还没有共享任何代码,但如果您正在调用label.layer.addBorder()
然后layoutIfNeeded()
,则只需调用addBorder
即可触发在cell.label.text = "4517 Bedford..."
cell.layoutIfNeeded()
cell.label.layer.addBorder(...)
方法测量帧大小之前布局传递。
onPause()