2017-01-11 7 views
0

Я создаю интерфейс UICollectionViewCell по коду. Все работает отлично, за исключением правильного ограничения. Когда я запускаю приложение, ярлык заголовка имеет нулевой запас справа. Вот мой кодNSLayoutConstraint margin zero вместо шестнадцати

let titleLabel: UILabel = { 
    let label = UILabel() 
    label.backgroundColor = UIColor.purple 
    label.translatesAutoresizingMaskIntoConstraints = false 
    return label 
}() 

func setupViews() { 
    addSubview(titleLabel) 

    // titleLabel 
    // top constraint 
    addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1, constant: 16)) 
    // left constraint 
    addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .left, relatedBy: .equal, toItem: self, attribute: .left, multiplier: 1, constant: 8)) 
    // right constraint 
    addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .right, relatedBy: .equal, toItem: self, attribute: .right, multiplier: 1, constant: 16)) 
    // height constraint 
    addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20)) 
} 

Я думаю, что что-то делать с toItem: self, потому что self является uilabel, и я хочу, связанные с его UICollectionViewCell

+0

Загружен ли размер ячейки перед добавлением объектов? Если нет, загрузите ячейку, затем запустите setupViews, а затем запустите self.setNeedsDisplay(), self.layoutIfNeeded(). Если да, вы можете попробовать запустить вышеперечисленные функции. – Starlord

+1

Что произойдет, если вы используете '-16' для постоянной константы ограничения? – vacawama

+0

@vacawama это работает! Как? – bruno

ответ

1

Проблема является порядок ваших товаров в вашем ограничение. В настоящее время вы говорите, что этикетка находится за правым краем своего супервизора. Вы можете переключить item и toItem в ваше правое ограничение или использовать -16 в качестве вашей постоянной.

Так как это:

addConstraint(NSLayoutConstraint(item: self, attribute: .right, relatedBy: .equal, toItem: titleLabel, attribute: .right, multiplier: 1, constant: 16)) 

или это:

addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .right, relatedBy: .equal, toItem: self, attribute: .right, multiplier: 1, constant: -16)) 

будет работать.

+1

Работал как шарм! – bruno