2016-08-03 6 views
0

Итак, я хочу программно ориентировать UILabel в горизонтальном и вертикальном направлении. Я следую this topic, но он не работает. Как я могу это сделать?Autolayout программно с UILabel не работает

р/с: это мой код:

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let noDataLabel = UILabel() 
     noDataLabel.text = "No data :(" 
     noDataLabel.textColor = UIColor.redColor() 
     noDataLabel.font = UIFont.systemFontOfSize(20) 
     noDataLabel.sizeToFit() 
     self.view.addSubview(noDataLabel) 
     NSLayoutConstraint(item: noDataLabel, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0).active = true 
     NSLayoutConstraint(item: noDataLabel, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0).active = true 
    } 
} 

ответ

4

Добавить это в ваш код:

noDataLabel.translatesAutoresizingMaskIntoConstraints = false 

Из яблочной документации:

По умолчанию, маска на автоматическом изменение зрения приводит к ограничениям, которые полностью определяют положение представления. Это позволяет системе автоматического макета отслеживать рамки просмотров, управление которыми осуществляется с помощью макета (через -setFrame :, например). Когда вы выбираете позицию с использованием автоматического макета, добавляя свои собственные ограничения, , вы должны установить это свойство равным NO. IB сделает это за вас.

+0

Спасибо! Теперь работает!!! –

1

Кроме того, необходимо создать ограничения размера для uilabel, как показано ниже, и добавить его в SuperView

NSLayoutConstraint(item: noDataLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100) 
NSLayoutConstraint(item: noDataLabel, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 40) 

ваша реализация будет выглядеть

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let noDataLabel = UILabel() 
     noDataLabel.text = "No data :(" 
     noDataLabel.textColor = UIColor.redColor() 
     noDataLabel.font = UIFont.systemFontOfSize(20) 
     noDataLabel.sizeToFit() 

     noDataLabel.translatesAutoresizingMaskIntoConstraints = false 

     self.view.addSubview(noDataLabel) 

     let horizontal = NSLayoutConstraint(item: noDataLabel, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0).active = true 
     let vertical = NSLayoutConstraint(item: noDataLabel, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0).active = true 
     let width = NSLayoutConstraint(item: noDataLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100) 
     let height = NSLayoutConstraint(item: noDataLabel, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 40) 

     self.view.addConstraint(horizontal) 
     self.view.addConstraint(vertical) 
     self.view.addConstraint(width) 
     self.view.addConstraint(height) 
    } 
} 
+0

Он по-прежнему не работает :( –

+0

Как @Prajeet Shrestha ответил добавить 'noDataLabel.translatesAutoresizingMaskIntoConstraints = false' линии, я обновил ответ – iSashok

+0

Спасибо! Теперь работает!!! –

0

noDataLabel.translatesAutoresizingMaskIntoConstraints = ложная noDataLabel.superview.addConstraint (NSLayoutConstraint (пункт: noDataLabel, атрибут: .CenterX, relatedBy: .Equal, toItem: self.view, атрибут: .CenterX, множитель: 1,0, постоянная : 0.0) .active = true) noDataLabel.superview.addConstraint (элемент: noDataLabel, атрибут: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0) .active = tru)

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