Как сделать так, чтобы ограничение авторазметки зависело от вида брата? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь наложить вид холста поверх 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, он будет работать (см. Комментарии в конце). Но я хочу использовать якоря Autolayout для достижения того же эффекта.

1 Ответ

0 голосов
/ 19 января 2019

Вам нужно установить

canvas.translatesAutoresizingMaskIntoConstraints = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...