Nslayoutконстринты работают не так, как ожидалось

#ios #swift #iphone #frame #nslayoutconstraint

Вопрос:

Приведенный ниже код работает не так, как ожидалось. информационная метка не добавляется в представление. Я вызываю следующие методы в порядке, указанном в viewDidLoad. Любая быстрая помощь/понимание будут полезны. Спасибо! Примечание : Я объявил все переменные в viewcontroller и не устанавливаю никаких свойств до тех пор, пока не будут вызваны соответствующие блоки настройки.

        
        self.view.addSubview(cancelButton)
        cancelButton.translatesAutoresizingMaskIntoConstraints = false
        cancelButton.addTarget(self, action: #selector(cancelButtonClicked(_:)), for: .touchUpInside)
        let constraints = [
            cancelButton.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
            cancelButton.widthAnchor.constraint(equalToConstant: 40),
            cancelButton.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
            cancelButton.heightAnchor.constraint(equalToConstant: 40)
        ]
        NSLayoutConstraint.activate(constraints)
        print(cancelButton.frame)
    }
    
    private func saveButtonSetup(){
        
        self.view.addSubview(saveButton)
        saveButton.translatesAutoresizingMaskIntoConstraints = false
        saveButton.addTarget(self, action: #selector(saveButtonClicked(_:)), for: .touchUpInside)
        let constraints = [
            saveButton.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),
            saveButton.widthAnchor.constraint(equalToConstant: 40),
            saveButton.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
            saveButton.heightAnchor.constraint(equalToConstant: 40)
        ]
        NSLayoutConstraint.activate(constraints)
        print(saveButton.frame)
    }
    
    private func TitleLabelSetup(){
       TitleLabel.backgroundColor = UIManager.Colors.cellBGColor
        TitleLabel.textAlignment = .center
        TitleLabel.font = UIManager.Fonts.titleFont
       TitleLabel.textColor = UIManager.Colors.titleColor
        self.view.addSubview(TitleLabel)
        let constraints = [
            TitleLabel.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor/*self.cancelButton.trailingAnchor*/,constant: 0),
           TitleLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor/*self.saveButton.leadingAnchor*/, constant: 0),
            TitleLabel.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
            TitleLabel.heightAnchor.constraint(equalToConstant: 40)
        ]
        NSLayoutConstraint.activate(constraints)
        print(TitleLabel.frame)
    }
    
    private funcInfoLabelSetup(){
        self.view.addSubview(InfoLabel)
        let constraints = [
            InfoLabel.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor,constant: 0),
           InfoLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
            InfoLabel.topAnchor.constraint(equalTo: TitleLabel.bottomAnchor,constant: 1),
            Label.heightAnchor.constraint(equalToConstant: 40)
        ]
        NSLayoutConstraint.activate(constraints)
        print(InfoLabel,InfoLabel.frame)
    }
    
    }```
 

Ответ №1:

translatesAutoresizingMaskIntoConstraints не имеет значения false для ваших меток closureInfoLabel и closeRequestTitleLabel.

Ответ №2:

Ваши ограничения неверны. Вы ставите на якорь ведущий к ведущему view и ведущий к ведущему view . Также вам необходимо установить translatesAutoresizingMaskIntoConstraints false

Вот исправление:

 private func closureInfoLabelSetup(){
    self.view.addSubview(closureInfoLabel)
    closureInfoLabel.translatesAutoresizingMaskIntoConstraints = false
    let constraints = [
        closureInfoLabel.leadingAnchor.constraint(equalTo: self.view.leadingAnchor,constant: 0),
        closureInfoLabel.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0),
        closureInfoLabel.topAnchor.constraint(equalTo: closeRequestTitleLabel.bottomAnchor,constant: 1),
        closureInfoLabel.heightAnchor.constraint(equalToConstant: 40)
    ]
    NSLayoutConstraint.activate(constraints)
    print(closureInfoLabel,closureInfoLabel.frame)
}