Swift - 标签宽度不准确

时间:2017-03-15 22:08:54

标签: ios swift storyboard

我在这里使用代码为我的标签创建边框:

扩展名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)
}

}

然而,当我将它添加到我的图层时,这就是我得到的:正如您所看到的,宽度完全混乱as you can see, the width is totally messed up 并且frame.width不准确。

我不确定为什么会这样。我没有在故事板中设置宽度,因为我希望标签适用于所有手机宽度。

提前感谢您的帮助!

1 个答案:

答案 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()