2016-03-05 2 views
0

Я нахожу, что ограничения не реализованы, исправляя при типичном наборе программных типов существующих представлений на досках рассказов. вот что у меня есть:Программно добавляя NSConstraints к существующим представлениям на раскадровки

class ViewController: UIViewController { 

    @IBOutlet weak var textField2: UITextField! { 
     didSet { 
      textField2.delegate = self 
     } 
    } 

    func viewDidLoad() { 
     super.viewDidLoad() 

     let superview = self.view 

     let textField1 = UITextField() 
     textField1.backgroundColor = UIColor.greenColor() 
     textField1.placeholder = "test text field" 
     view.addSubview(textField1) 
     textField1.translatesAutoresizingMaskIntoConstraints = false 
     superview.addConstraint(NSLayoutConstraint(item: textField1, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: superview.frame.width * 0.50)) 
     superview.addConstraint(NSLayoutConstraint(item: textField1, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: superview.frame.height * 0.05)) 
     superview.addConstraint(NSLayoutConstraint(item: textField1, attribute: .CenterX, relatedBy: .Equal, toItem: superview, attribute: .CenterX, multiplier: 1, constant: 0)) 
     superview.addConstraint(NSLayoutConstraint(item: textField1, attribute: .CenterY, relatedBy: .Equal, toItem: superview, attribute: .CenterY, multiplier: 1, constant: 0)) 

     textField2.translatesAutoresizingMaskIntoConstraints = false 
     superview.addConstraint(NSLayoutConstraint(item: textField2, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: superview.frame.width * 0.50)) 
     superview.addConstraint(NSLayoutConstraint(item: textField2, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: superview.frame.height * 0.05)) 
     superview.addConstraint(NSLayoutConstraint(item: textField2, attribute: .CenterX, relatedBy: .Equal, toItem: superview, attribute: .CenterX, multiplier: 1, constant: 0)) 
     superview.addConstraint(NSLayoutConstraint(item: textField2, attribute: .CenterY, relatedBy: .Equal, toItem: superview, attribute: .CenterY, multiplier: 1, constant: 0)) 

    } 
} 

textField1 работает отлично. он добавляется в центр представления. однако textField2, который я перетащил и бросил на раскадровку, смещен от центра. почему это происходит?

благодаря

ответ

1

Проблема заключается в том, что если вид исходит из раскадровки, как ваши textField2, он уже имеет ограничения. Высказывание textField2.translatesAutoresizingMaskIntoConstraints = false не волнует эту проблему. Вам также необходимо будет удержать эти ограничения и удалить их, прежде чем применять свои собственные ограничения в коде. Это может быть сложно сделать, и выне делать это, поэтому ваш взгляд неправдоподобный. Это лучше, на данном этапе, для вас, чтобы следовать этим простым правилам:

  • если вид происходит из раскадровки, установить его ограничение только в раскадровке

  • но если вид сделан в код, теперь вы можете сказать translatesAutoresizingMaskIntoConstraints = false и установить свои ограничения в коде

+1

Смотрите также мой ответ на этот вопрос, который на самом деле точно такой же вопрос: http://stackoverflow.com/questions/35421925/scrunched-layout – matt

+0

спасибо за ваш ответ – Alex

Смежные вопросы