restricciones para olvide intentos huella fallidos eliminar digitos contraseña con como codigo cambiar bloqueo bloquear apps ios swift uiview autolayout uikit

ios - para - Dónde agregar el código de restricciones de diseño automático dentro de una vista UIV personalizada



me olvide el codigo de restricciones del iphone (2)

Me gusta configurar mi código de AutoLayout en las vistas cuando tenga más sentido. También encontré que es más fácil configurar todas las restricciones en un lugar como parte del inicio de customView.

import UIKit class customView:UIView { var customLabel:UILabel = UILabel() override init(frame: CGRect) { super.init(frame: frame) self.setupUI() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func setupUI() { // Setup UI self.customLabel.translatesAutoresizingMaskIntoConstraints = false self.addSubview(customLabel) // Setup Constraints self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[customLabel]|", options: NSLayoutFormatOptions.init(rawValue: 0), metrics: nil, views: ["customLabel":self.customLabel])) self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[customLabel]-10-|", options: NSLayoutFormatOptions.init(rawValue: 0), metrics: nil, views: ["customLabel":self.customLabel])) } }

A menudo veo que se agregan restricciones de Auto Layout en UIViewController pero para mí ese es el lugar equivocado para la lógica de diseño.

¿Es posible agregar NSLayoutConstraint s dentro de una vista UIView personalizada?

¿En UIView lugar de UIView sería el lugar correcto para agregarlos programáticamente?


¿Es posible agregar NSLayoutConstraints dentro de una vista UIV personalizada?

Sí, es posible agregar restricciones dentro de una vista personalizada, la organización es muy importante aquí, especialmente si desea animar partes de su vista personalizada.

Lea la sección de subclases del documento de referencia UIView de Apple

Restricciones

requireConstraintBasedLayout: implemente este método de clase si su clase de vista requiere restricciones para funcionar correctamente.

updateConstraints: implemente este método si su vista necesita crear restricciones personalizadas entre sus subvistas.

alignRectForFrame :, frameForAlignmentRect: - Implemente estos métodos para anular la forma en que sus vistas se alinean con otras vistas.

¿En qué lugar de UIView es el lugar correcto para agregarlos programáticamente?

Aquí hay un esquema esqueleto de una clase personalizada. La principal preocupación es que usted centralice sus restricciones, de lo contrario, la clase se volverá muy desordenada a medida que agregue más restricciones. También puede introducir otras configuraciones en el método updateConstraints () y agregar o eliminar condicionalmente restricciones al establecer sus valores de configuración y luego llamar a setNeedsUpdateConstraints ().

Cualquier restricción que decida que quiere animar debería ser, a la ligera, variables de instancia.

Espero que esto ayude :)

class MyCustomView: UIView { private var didSetupConstraints = false private let myLabel = UILabel(frame: CGRectZero) // MARK: Lifecycle override init(frame: CGRect) { super.init(frame: CGRectZero) self.setup() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.setup() } // Mark: - Setup private func setup() { // 1. Setup the properties of the view it''s self self.translatesAutoresizingMaskIntoConstraints = false backgroundColor = UIColor.orangeColor() clipsToBounds = true // 2. Setup your subviews setupMyLabel() // 3. Inform the contraints engine to update the constraints self.setNeedsUpdateConstraints() } private func setupMyLabel() { myLabel.translatesAutoresizingMaskIntoConstraints = false } override func updateConstraints() { if didSetupConstraints == false { addConstraintsForMyLabel() } super.updateConstraints() //Documentation note: Call [super updateConstraints] as the final step in your implementation. } private func addConstraintsForMyLabel() { // Add your constraints here } }