Estoy crear subclases de una UICollectionViewCell y haciendo todo el diseño en código con diseño automático. Este es mi método init:

- (id)initWithFrame:(CGRect)frame{
    frame = CGRectMake(0, 0, 403, 533);
    if (self = [super initWithFrame:frame]) {
        self.translatesAutoresizingMaskIntoConstraints = NO;

        PBCardPricesViewController *pricesView = [[PBCardPricesViewController alloc] init];
        [self addSubview:pricesView.view];

        UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CardBackground"]];
        [self addSubview:background];

        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(20)-[background]|" options:0 metrics:nil views:@{@"background":background}]];
        [self addConstraint:[NSLayoutConstraint constraintWithItem:pricesView.view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:background attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];

        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[background]|" options:0 metrics:nil views:@{@"background":background}]];
        [self addConstraint:[NSLayoutConstraint constraintWithItem:pricesView.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:background attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
    }

    return self;
}

Cuando yo comente la translateAutoresizingMask línea que hago:

Unable to simultaneously satisfy constraints.

    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 

(

    "<NSLayoutConstraint:0x1d83f540 H:[UIImageView:0x1d83f950]-(0)-|   (Names: '|':PBCardViewCollectionCell:0x1d83b970 )>",

    "<NSAutoresizingMaskLayoutConstraint:0x1c55ad20 h=--& v=--& H:[PBCardViewCollectionCell:0x1d83b970(393)]>",

    "<NSAutoresizingMaskLayoutConstraint:0x1c559410 h=--& v=--& UIImageView:0x1d83f950.midX == + 191.5>",

    "<NSAutoresizingMaskLayoutConstraint:0x1c559450 h=--& v=--& H:[UIImageView:0x1d83f950(383)]>"

)



Will attempt to recover by breaking constraint 

<NSLayoutConstraint:0x1d83f540 H:[UIImageView:0x1d83f950]-(0)-|   (Names: '|':PBCardViewCollectionCell:0x1d83b970 )>



Break on objc_exception_throw to catch this in the debugger.

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Cuando no lo hago me sale este error:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UICollectionView's implementation of -layoutSubviews needs to call super.'
¿Cómo puedo obtener esto para mostrar la manera en que yo quiera? Lo que me estoy perdiendo?

Es «@»|-(20)-[fondo]|»» se supone que tiene una H: en el frente o se trata de un estilo de sintaxis que no sé? También, parece que «pricesView» va a ser puesto en libertad, después de la función «init» …por lo que sólo tienen la vista. Es que va a causar problemas?
H: es opcional. Si ni un H o V se especifica el valor predeterminado es H., Por el momento, la pérdida de la vista controlador está bien. Estoy tratando de conseguir el diseño hacia abajo.
Gotcha, no sabía acerca de la H, fresco. ¿Tratar de fijación de la restricción de errores sin quitar el ajuste de tamaño automático de la máscara? Creo que la máscara se requiere en el celular…en su Lugar, hacer backgroundView.translatesAutoresizingMaskIntoConstraints = NO; y pricesView.vista.translatesAutoresizingMaskIntoConstraints = NO;
Que lo hizo, bien hecho.

OriginalEl autor Civatrix | 2012-12-13

1 Comentario

  1. 14

    La publicación de mi comentario como respuesta:

    En mis experiencias, collectionViewCells (y tableViewCells) requieren que sus autoresizingmask o pueden lanzar la excepción que ver. Pero usted está consiguiendo restricción de conflictos, debido a que las subvistas agregó, tan sólo hay que quitar la máscara a partir de su subvistas:

    backgroundView.translatesAutoresizingMaskIntoConstraints = NO;  
    pricesView.view.translatesAutoresizingMaskIntoConstraints = NO; //you might get it to work without doing this line

    Yo también trato de recordar quitar la máscara en vistas de que yo cree con alloc (es decir, no a partir de una xib), ya que la mayoría de la hora de dar a los conflictos.

    Gracias de nuevo, mucho que aprender con el nuevo diseño automático.
    Realmente tuve que establece este en el contentView.
    La configuración de este en el contentView era necesario para mí y, a continuación, agregar la anchura y la altura de las restricciones

    OriginalEl autor yuf

Dejar respuesta

Please enter your comment!
Please enter your name here