objective c - create - iOS 8 CGAffineTransformMakeScale+autolayout no funciona más
programmatically constraints swift 4 (1)
Parece un error de iOS 8 para mí. Tuve el mismo problema. Mi solución fue desactivar el diseño automático para obtener una vista previa y recurrir a autoresizingMask.
preview.translatesAutoresizingMaskIntoConstraints = YES;
preview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
preview.frame = view.bounds;
Pero mi vista previa es un UIImageView simple. No tengo ni idea de cómo funcionaría con una vista de vista previa de autolayout compleja compleja.
Tengo una configuración bastante similar a la tuya, también utilizo el VC de marcador de posición en la parte superior, pero está construido con AutenticidadMask también, parecía más fácil centrar las cosas verticalmente.
Si usa alguna restricción dentro de la vista de vista previa y experimenta problemas, entonces trataría de ajustar la vista previa en otro UIView y ver si funciona. [view (autoresizingMask, custom frame, scaled)] -> [view (autoresizingMask = Flexible W+H)] -> [Preview (Autolayout)]
Parece que hay una publicación relacionada con mi problema, pero ninguna parece ayudar. ¿Cómo ajusto el punto de anclaje de un CALayer, cuando se usa el diseño automático?
Tengo una vista previa a escala de mi aplicación (como un tutorial), que la vista estándar (y controlador de vista) redujo y se muestra en otra vista.
=============
= =
= --------- =
= - - =
= -Preview- =
= - - =
= --------- =
= View =
=============
Para esto uso este código:
previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);
También necesito esta vista a escala para alinear con el controlador de vista tutorial. Para esto creé una "vista de marcador de posición" que quiero que mi vista a escala coincida en tamaño.
Para esto uso:
-(void)setConstraintsForPreviewViewController
{
NSArray *attributes = @[@(NSLayoutAttributeLeftMargin), @(NSLayoutAttributeRightMargin), @(NSLayoutAttributeTopMargin), @(NSLayoutAttributeBottomMargin)];
[attributes enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) {
NSLayoutAttribute attribute = [obj integerValue];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.viewControllerPlaceholderView
attribute:attribute
relatedBy:NSLayoutRelationEqual
toItem:previewViewController.view
attribute:attribute
multiplier:1
constant:0]];
}];
}
Esto funcionó bien en iOS 7, pero al construir con XCode 6 y iOS 8 esto parece romperse. Parece que ahora primero establece las restricciones (se ajusta al marcador de posición) y luego lo escala (lo que resulta en una vista previa demasiado pequeña).
Código:
-(void)setupPreviewViewController
{
float scale = [self scale];
previewViewController = [self.storyboard instantiateViewControllerWithIdentifier:[PLACEHOLDER_VIEWCONTROLLER_NAMES objectAtIndex:self.identifier]];
previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);
[self.view addSubview:previewViewController.view];
previewViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[self addChildViewController:previewViewController];
[self setConstraintsForPreviewViewController];
self.viewControllerPlaceholderToImageViewSpaceConstraint.constant = ([self hasNavigationBar] ? (44 * scale * 2) : -22 * scale * 2);
self.viewControllerPlaceholderToBottomSpaceConstraint.constant = IS_WIDESCREEN ? 160 : 131;
previewViewController.view.userInteractionEnabled = NO;
[self.view setNeedsLayout];
}