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.