Swift ImagePicker создает сигнал SIGAL SIGABRT в ограничениях AutoLayout - PullRequest
0 голосов
/ 12 июня 2019

Я строю проект в Swift5, и мне нужен пользователь, чтобы загрузить фотографию.У меня это до такой степени, что пользователь может открыть ImagePicker и выбрать фотографию, но всякий раз, когда они выбирают изображение и возвращаются к исходному VC, я получаю ошибку SIGNAL SIGABRT (внизу сообщения):

Вот где я программно добавляю свои ограничения:

func setupLayout(){
    imgView.topAnchor.constraint(equalTo: view.topAnchor, constant: 150).isActive = true
    imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imgView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    imgView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    imgView.heightAnchor.constraint(equalToConstant: 125).isActive = true

    topLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    topLabel.topAnchor.constraint(equalTo: imgView.bottomAnchor, constant: 60).isActive = true
    topLabel.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -50).isActive = true
    topLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true
    topLabel.adjustsFontSizeToFitWidth = true

    inputBox.topAnchor.constraint(equalTo: topLabel.bottomAnchor, constant: 30).isActive = true
    inputBox.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    inputBox.heightAnchor.constraint(equalToConstant: 50).isActive = true
    inputBox.widthAnchor.constraint(equalToConstant: 250).isActive = true

    btn.topAnchor.constraint(equalTo: inputBox.bottomAnchor, constant: 40).isActive = true
    btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

    let navBarImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
    navBarImageView.contentMode = .scaleAspectFit
    let navBarImage = UIImage(named: "bzaLogo")
    navBarImageView.image = navBarImage
    self.navigationController?.navigationItem.titleView = navBarImageView
}

И где я возвращаю изображение обратно в imageView:

func didSelect(image: UIImage?) {
    self.imgView.image = image
    self.global.uploadFile(imageView: self.uploadIcon.imageView!)
}

И где я добавляю подпредставления:

override func viewDidLoad() {
    super.viewDidLoad()
    currentState = 0
    imgView.translatesAutoresizingMaskIntoConstraints = false
    topLabel.translatesAutoresizingMaskIntoConstraints = false
    inputBox.translatesAutoresizingMaskIntoConstraints = false
    btn.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(imgView)
    view.addSubview(topLabel)
    view.addSubview(inputBox)
    view.addSubview(btn)

    inputBox.addTarget(self, action: #selector(inputBoxClicked(textField:)), for: .touchDown)
    imagePicker = ImagePicker(presentationController: self, delegate: self)
    viewModel.state = currentState
    inputBox.delegate = self

    setupLayout()
}

И здесь выдается ошибка:

2019-06-12 13: 22: 16.635903-0600 bZa [39792: 1836482] *** Завершение работы приложения из-за невыполненного исключения «NSGenericException», причина: «Невозможно активировать ограничение с помощью якорей, потому что у них нет общего предка.Указывает ли ограничение или его привязки на элементы в разных иерархиях представления?Это незаконно. '

1 Ответ

0 голосов
/ 12 июня 2019

В настоящее время проблема заключается в том, что вы добавляете ограничения между представлениями, у которых нет предка комментариев, поэтому убедитесь, что вы добавили

view.addSubview(imgView)  
view.addSubview(topLabel) 
view.addSubview(inputBox)
view.addSubview(btn)

Также не забудьте

imgView.translatesAutoresizingMaskIntoConstraints = false 
topLabel.translatesAutoresizingMaskIntoConstraints = false
inputBox.translatesAutoresizingMaskIntoConstraints = false
btn.translatesAutoresizingMaskIntoConstraints = false
...