如何让自动布局约束取决于同级视图?

时间:2019-01-19 18:03:46

标签: swift

我试图将画布视图覆盖在UIImageView上以绘制一些自定义的线。

我正在尝试让画布自动布局约束取决于UIImageView。但是它不起作用:当我在xcode布局调试器中调试时,UIImageView的框架是一个大小为400 x 700的矩形,但是Canvas视图的框架大小为0x0。

代码相对简单:

class Canvas : UIView {
    override func draw(_ rect: CGRect) {
        super.draw(rect)

        guard let context = UIGraphicsGetCurrentContext() else { return }



        let startPoint = CGPoint(x: 0, y: 0)
        let endPoint = CGPoint(x:100  , y: 100)

        context.setStrokeColor(UIColor.red.cgColor)
        context.setLineWidth(7)

        context.move(to: startPoint)
        context.addLine(to: endPoint)

        context.strokePath()
    }


}

class ViewController: UIViewController {


    let canvas:Canvas = {
        let canvas = Canvas()
        canvas.backgroundColor = UIColor.black
        canvas.alpha = 0.2
        return canvas
    } ()

    let photoView: UIImageView = {
        let imageView = UIImageView()

        imageView.image =     UIImage(imageLiteralResourceName: "hongjinbao")
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFill
        return imageView
    } ()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // stack views
        view.addSubview(photoView)
        view.addSubview(canvas)

        setupLayout()


    }

    private func setupLayout() {





        photoView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        photoView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        photoView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true

        photoView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        canvas.topAnchor.constraint(equalTo: photoView.topAnchor).isActive = true
        canvas.bottomAnchor.constraint(equalTo: photoView.bottomAnchor).isActive = true
        canvas.leadingAnchor.constraint(equalTo: photoView.leadingAnchor).isActive = true

        canvas.trailingAnchor.constraint(equalTo: photoView.trailingAnchor).isActive = true




        // this two works together
//        photoView.frame = view.frame
//        canvas.frame = photoView.frame
    }


}

我错过了什么吗?如果我使用.frame设置尺寸,则可以使用(请参阅末尾的注释)。但是我想使用自动布局锚来达到相同的效果。

1 个答案:

答案 0 :(得分:1)

您需要设置

canvas.translatesAutoresizingMaskIntoConstraints = false