2016-08-31 2 views
0

Здесь я создаю подкласс NSView и добавлю его в NSViewController.Как добавить NSLayoutConstraint в подпрограмму программно созданного подкласса NSView?

class DialogView: NSView { 

    var value: Int = 0 

    let textLabel: NSTextField 

    required init?(coder: NSCoder) { 
     fatalError("NSCoding not supported") 
    } 


    init(position: CGPoint, width: CGFloat, height: CGFloat value: Int) { 

     textLabel = NSTextField.init(frame: NSRect(x: width/5.0, y: height/5.0, width: width/1.5, height: height/5.0)) 
     textLabel.alignment = NSTextAlignment.center 

     super.init(frame: NSRect(x: position.x, y: position.y, width: width, height: height)) 

     addSubview(textLabel) 

     self.value = value 
     textLabel.stringValue = "\(value)" 
     textLabel.textColor = NSColor.lightGray 
    } 
} 

Как и выше подкласса, то ограничение для NSTextField создается постоянным при инициализации. Вместо добавления фрейма при инициализации я хотел бы добавить NSLayoutConstraint.

В каком методе следует добавить NSLayoutConstraint для NSTextField - DialogView.

ответ

0

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

override func updateConstraints() { 
    super.updateConstraints() 
    guard !constraintsSet else{ 
     return 
    } 
    constraintsSet = true 
    ...<Add here> 
} 

Также вы должны установить translatesAutoresizingMaskIntoConstraints к ложному для любых подвидов вы позиционируете с ограничениями:

textLabel.translatesAutoresizingMaskIntoConstraints = false 
Смежные вопросы