Tengo una vista de desplazamiento y una vista de imagen detrás y la estoy poblando con plumillas. Estoy usando el diseño automático. Tengo un espacio inferior para supervisar y un espacio superior para supervisar ambas vistas. La vista de imagen hace exactamente lo que quiero que haga. Para el iphone 5 está donde lo quiero. Y para los otros iphones, permanece por encima de la parte inferior de la pantalla, por lo que cambia de tamaño correctamente. La vista de desplazamiento se ve bien en el iPhone 5, pero en los otros teléfonos no cambia de tamaño, por lo que se desplaza hacia abajo debajo de la vista de la aplicación. Recibo estos mensajes en el registro:
2012-11-21 10:42:38.576 LCHApp[12604:907] 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:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cca10 h=-&- v=-&- ScheduleViewNib:0x1d853630.height == UIScrollView:0x1d8413b0.height - 386>",
"<NSLayoutConstraint:0x1d8e5340 V:[UIImageView:0x1d892110]-(64)-| (Names: '|':ScheduleView:0x1d8efc30 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cf520 h=--& v=--& V:[ScheduleView:0x1d8efc30(480)]>",
"<NSLayoutConstraint:0x1d8eaed0 V:|-(45)-[UIScrollView:0x1d8413b0] (Names: '|':ScheduleView:0x1d8efc30 )>"
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>
Ya lo intenté
[self setTranslatesAutoresizingMaskIntoConstraints:YES];
y
[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:YES];
Por lo que puedo ver, esto simplemente elimina todas las restricciones de las vistas. Y no es lo que quiero.
fuente
Respuestas:
La relación entre UIScrollView y el diseño automático es diferente de otros aspectos del diseño automático. Básicamente, si se permitiera que funcionara un diseño automático simple, nada se desplazaría. Por ejemplo, si una subvista de la vista de desplazamiento se fijó de la manera normal mediante una restricción a 10 puntos desde la parte superior de la vista de desplazamiento, se fijaría absolutamente allí; nunca se movería, sin importar cómo se desplazara la vista de desplazamiento.
Para resolver este problema, un UIScrollView que usa autolayout funciona de una manera completamente nueva. Por lo tanto, cuando dice "Estoy usando el diseño automático", debe prepararse para que las cosas funcionen de manera muy diferente a como lo hacía antes. Debe usar una sola subvista de vista de desplazamiento con
translatesAutoresizingMaskIntoConstraints = YES
y un tamaño de contenido explícito, o de lo contrario todo debe tenertranslatesAutoresizingMaskIntoConstraints = NO
y el tamaño del contenido se deducirá implícitamente en función de las restricciones de las subvistas.Esto está muy bien explicado en https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html
fuente
constraintsWithVisualFormat:options:metrics:views:
incorrecto). Utilice siempre código real que realmente funcione. Y además, en un proyecto real puedes incluir una imagen real. La gente de Apple no tiene imaginación ni tiempo; debe hacer todo el trabajo por adelantado.Muy importante cuando se utiliza el diseño automático: debe fijar la parte derecha y / o la parte inferior de la última subvista a la derecha y / o la parte inferior de la vista de desplazamiento. Así es como la vista de desplazamiento conoce el tamaño del contenido. Por ejemplo:
[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:lastSubView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]];
Mi agradecimiento a este sitio por proporcionar el ejemplo perfecto.
Perdí horas debido a esto y espero ahorrarles a otros mi dolor.
fuente
Para que UIScrollviews funcione bien con las restricciones, utilizo este enfoque que se responde aquí . En esa respuesta, abordo cómo hacer que funcione una vista de desplazamiento de desplazamiento vertical que también funcione con la rotación del dispositivo. También puede modificar el enfoque para trabajar con vistas de desplazamiento de desplazamiento horizontal . Para las vistas de desplazamiento que se desplazan en ambas direcciones, no agregue el truco de restricción de ancho de coincidencia de tamaño. Pero haz todo lo demás igual.
fuente
Un par de cosas.
Este error indica que su plumilla o un control dentro de esa plumilla NO está usando el diseño automático.
fuente