将标签添加到点

时间:2018-12-06 22:17:36

标签: ios swift

我已遵循本教程:https://www.raywenderlich.com/410-core-graphics-tutorial-part-2-gradients-and-contexts

我正在尝试在每个点上添加一个标签,并用Int作为该点,但是它不会显示。在 ///在图形笔划顶部绘制圆圈

中添加代码
//Draw the circles on top of graph stroke
        for i in 0..<graphPoints.count {
            var point = CGPoint(x:columnXPoint(i), y:columnYPoint(graphPoints[i]))
            point.x -= Constants.circleDiameter / 2
            point.y -= Constants.circleDiameter / 2

            let circle = UIBezierPath(ovalIn: CGRect(origin: point, size: CGSize(width: Constants.circleDiameter, height: Constants.circleDiameter)))
            circle.fill()

            //let label = UILabel(frame: CGRect(origin: point, size: CGSize(width: Constants.circleDiameter, height: Constants.circleDiameter)))
            let label = UILabel()
            label.frame.origin = CGPoint(x:columnXPoint(i), y:columnYPoint(graphPoints[i]))
            label.text = "TDDDDDDDE"

            label.translatesAutoresizingMaskIntoConstraints = false
            label.textColor = UIColor.black
            self.addSubview(label)
            self.view.addSubview(label)
        }

有人可以帮我添加标签吗?标签不会显示,我要在要点上显示。

1 个答案:

答案 0 :(得分:0)

最好的客人,因为这里没有完整的内容。我看到3个可能的原因

1:您应该替换

self.addSubview(label)
self.view.addSubview(label)

通过

self.addSubview(label)

第二行将从view中删除标签,以将其添加到self.view,如果它们不同,则可能会出现问题。

2:在下面的代码行中,您告诉标签使用自动布局...但不提供任何约束,因此它们可能在此处,但不在您期望的位置。

label.translatesAutoresizingMaskIntoConstraints = false

要添加约束:see official Apple Doc,例如以下示例:

label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: aConstant).isActive = true

但是3:您的标签初始化时没有框架/没有空白框架。如果不使用自动版式,请在设置内容,字体等之后,在标签上调用sizeToFit。如果您坚持使用自动布局,则这一点不适用。

与问题间接相关的另一点:如果您设法使代码正常工作,则可能会有太多标签:您的代码似乎在draw方法中,这意味着您每次渲染视图时都将实例化新标签...并且不会删除以前的标签。更好的做法是在加载数据时实例化标签(如果它们取决于数据点),将其放置在layoutSubviews中或完全跳过标签并使用NSAttributedString绘制函数来渲染标签。在视图中直接输入文字。