tutorial the programming language kits for apple xcode swift

the - xcode for windows



Desactivar programáticamente la restricción de diseño automático (3)

Al desarrollar para iOS 8.0 o posterior, simplemente use la propiedad NSLayoutConstraint de NSLayoutConstraint después de crear su IBOutlet.

ACTUALIZADO

  • para tener una fuerte referencia a la salida según la sugerencia a continuación, gracias @rob mayoff.
  • para usar .isActive en lugar de .active con Swift 4 según la siguiente sugerencia, gracias @Mohit Singh.

Tu celular tendría la siguiente salida:

@IBOutlet var photoBottomConstraint: NSLayoutConstraint!

y accederías a la restricción en willDisplayCell como:

myCell.photoBottomConstraint.isActive = false

y cuando lo necesites de nuevo:

myCell.photoBottomConstraint.isActive = true

¿Hay alguna forma programática de deshabilitar temporalmente una restricción de diseño automático? No quiero que esa restricción sea considerada por un cierto período de tiempo hasta que la necesite nuevamente.


Basado en la respuesta de oyalhi, también quiero señalar que tiene que hacer una fuerte referencia a sus restricciones si desea que esté inactivo:

@IBOutlet var photoBottomConstraint: NSLayoutConstraint!

No es antecedente, pero si está utilizando una referencia débil, photoBottomConstraint podría ser nulo después de esta llamada:

myCell.photoBottomConstraint.active = false


Usted usa NSView de removeConstraint: si ha creado la restricción en el generador de interfaz, conéctelo al código a través de un IBOutlet

class MyView : NSView { @IBOutlet var temporaryConstraint : NSLayoutConstraint! var constraint : NSLayoutConstraint! = nil /* my strong link */ var constraintShowing : Bool func awakeFromNib() { constraint = temporaryConstraint } func toggleLayoutConstraint(sender : AnyObject) -> () { if constraintShowing { self.removeConstraint( constraint ) } else { self.addConstraint( constraint ) } constraintShowing = !constraintShowing } }

NSTableColumns como el baile que solíamos tener que ver con NSTableColumns en los 10.4 días antes de que pudieran ocultarse.

También puedes hacer un pequeño gadget controlador.

class ConstraintController { var constraint : NSLayoutConstraint var view : NSView var show : Bool { didSet { if show { view.addConstraint(constraint) } else { view.removeConstraint(constraint) } } } init (c : NSLayoutConstraint, inView : NSView) { constraint = c view = inView show = true } } class MyView : NSView { @IBOutlet var temporaryConstraint : NSLayoutConstraint! var control : ConstraintController? = nil func awakeFromNib() -> () { control = ConstraintController(temporaryConstraint, inView: self) } func show(sender : AnyObject!) -> () { control!.show } func hide(sender : AnyObject!) -> () { control!.hide } }

Más líneas, pero posiblemente más fáciles de entender y menos astutas.