without ios uiview storyboard frame subview

ios - without - uiviewcontroller swift



iOS-Cambio de fotograma de una subvista de una UIView subclasificada(usando storyboard con la distribución automática habilitada) (3)

Cuando usa el diseño automático, no cambia ni establece marcos, cambia las restricciones. Hay 3 videos en el diseño automático que se presentaron en la WWDC 2012. Debería consultarlos si desea aprender a usar el diseño automático.

Estoy construyendo una barra de progreso personalizada (subclase de UIView). Agrego un UIImageView a UIView que usa imágenes repetitivas para mostrar el progreso. La vista se agrega al guión gráfico y puedo hacer que se muestre bien, sin embargo, si trato de cambiar el marco, solo muestra lo que se muestra en el archivo del guión gráfico (es decir, si la vista del guión gráfico tiene un fondo amarillo, pero el código de la subclase uiview cambia a verde, si trato de cambiar el marco de la UIImageView en el código para reflejar el progreso actual, entonces vuelve al fondo amarillo)

Intenté usar estos sin suerte:

[self updateConstraints]; [self layoutSubviews];

ACTUALIZAR

Sé que necesito configurar una restricción para utilizarla con el diseño automático. Sin embargo, debe hacerse mediante programación ya que estoy creando el UIView subclasificado de esta manera. Aquí está el código que estoy intentando, sé que estoy cerca, pero no puedo hacerlo funcionar:

[self addConstraint: [NSLayoutConstraint constraintWithItem:self.progressView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationLessThanOrEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1 constant:progressWidth]]; [UIView animateWithDuration:3 animations:^{ [self.progressView layoutIfNeeded]; }];


Cuando se trabaja con autolayout uno nunca debe tocar el marco. El objetivo de utilizar un sistema de disposición como este es que los marcos se deducen en función de las restricciones satisfactorias que se les atribuyen.

Sin conocer algunos detalles más, la forma de abordar esto sería crear puntos de venta NSLayoutConstraint desde su guión gráfico hasta la vista en cuestión. Por ejemplo, puede tener una restricción de ancho en la vista de progreso: la creación de una salida NSLayoutConstraint a la restricción de ancho le permitirá actualizar la constant , que a su vez ajustará el marco.

Ejemplo con animación:

self.widthConstraint.constant = 300; [UIView animateWithDuration:0.4 animations:^{ [self.view layoutIfNeeded]; }];

Actualización 5/15/2013

Aquí hay un ejemplo de cómo crear la restricción programáticamente usando el formato visual para las restricciones (más fácil de usar)

UIView *w_progressView = self.progressView NSArray *wc = [NSLayoutConstraint constraintsWithVisualFormat:@"[w_progressView(200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(w_progressView)];

(perdón por el formateo, es un método largo ...)

A continuación, agregue NSArray de restricciones devueltas a la vista principal:

[self addConstraints:wc];

La notación progressView(200) pone un ancho de 200 puntos en la vista progressView


Mientras usa el ajuste automático si desea cambiar el marco de cualquier vista, primero debe escribir ...

[view setTranslatesAutoresizingMaskIntoConstraints:YES];

y entonces

[view setFrame:...];