当相对于父视图中的其他元素添加约束时,Bezier drawRect 子视图不可见

Bezier drawRect subview not visible when constraints are added in relation to other elements in the superview

我已经添加了一个带有自己的 UIView class LogoLineView.swift 的子视图到父视图 ViewController.swift。

在故事板的超级视图中,我有 3 个 UI 元素:

现在,在我的子视图 class (LogoLineView.swift) 中,我重写了 drawRect,如下所示:

class LogoLineView: UIView {

var lineWidth: CGFloat = 0.5 {didSet { setNeedsDisplay() } }
var blueLineColor: UIColor = UIColor.blueColor() { didSet { setNeedsDisplay() } }
var redLineColor: UIColor = UIColor.redColor() { didSet { setNeedsDisplay() } }
var subViewCenter: CGPoint {
    return convertPoint(center, fromView: superview)
}
override func drawRect(rect: CGRect) {

    var blueLinePath = UIBezierPath()
    blueLinePath.moveToPoint(subViewCenter)
    blueLinePath.addLineToPoint(CGPoint(x: bounds.minX, y: bounds.midY))
    blueLinePath.lineWidth = lineWidth;
    blueLineColor.set()
    blueLinePath.stroke()
    var redLinePath = UIBezierPath()
    redLinePath.moveToPoint(subViewCenter)
    redLinePath.addLineToPoint(CGPoint(x: bounds.maxX, y: bounds.midY))
    redLinePath.lineWidth = lineWidth;
    redLineColor.set()
    redLinePath.stroke()
}

}

我遇到的问题是,当我相对于父视图中的其他元素向子视图添加约束时,我绘制的线不可见。

但是,如果我删除父视图中的所有其他元素并只保留子视图,那么我就可以看到按照我想要的方式绘制的线条。

我想在文本 "Hello World" 和文本 "This is my first time using Core Graphics and Bezier Paths" 之间画线。我希望这条线能够适应任何屏幕尺寸。

我使用的约束如下:

你能帮我找到丢失的东西吗?我对使用 Core Graphics 和 Bezier Paths 很陌生。谢谢。

自动布局系统折叠了您绘制线条的视图。您的文本视图未折叠的原因是它们具有固有高度。给你的线视图一个固定的高度约束,或者在你的视图子类中覆盖 intrinsicContentSize() 以便该视图也有一个固有的大小。