2012-01-02 6 views
17

Estoy construyendo una aplicación simple usando el autolayout, y me encontré con una situación extraña. Coloco un campo de texto en una parte vacía de una gran vista abierta para que no se vea afectada por nada más que la supervista, pero cuando intento modificar la restricción de "Ancho" para que sea> = en lugar de ==, crea una nueva restricción y se niega a modificar el anterior. No puedo eliminarlo, ni cambiar ninguno de sus atributos, porque solo crea uno nuevo.Cocoa Autolayout - ¿Por qué no puedo eliminar o modificar la restricción de ancho (morado) en un campo de texto?

Aquí hay una comparación de las dos restricciones, la púrpura es la obstinada, y la azul es la recién creada.

Constraint comparison

¿Por qué es el redondeado de color púrpura no modificable?

+0

¿Te refieres a la púrpura redondeada? –

+1

@Peter Hosey: Lo siento, tengo algo de daltonismo rojo. Gracias. ;) –

+0

@ChrisCooper - ¿podría explicarme exactamente cómo quiere abrir su ventana? Aunque tengo el mismo comportamiento que tú (en Xcode 4.2.1), no estoy seguro de si esto es realmente un problema. Cuando diseño mis campos de texto, generalmente quiero que estén limitados por los elementos de la interfaz de usuario que los rodean, ya sea la supervista u otros elementos circundantes. –

Respuesta

11

Mi problema tiene que ver con el hecho de que no se han añadido otras restricciones que el ancho pueda verse forzado a cambiar. Cuando agregué más otras restricciones (como el espacio inicial y posterior), pude alterar la restricción púrpura (de hecho, desapareció y tuve que agregar la mía).

Parece extraño que no pueda agregar sus propias limitaciones a menos que haya una posibilidad de que se rompan, pero supongo que así es como se ha integrado en IB en algunos casos.

17

He trabajado alrededor de la presencia de restricciones indelebles pero no deseadas en IB al establecer su prioridad en 1. No parece lo correcto, pero a veces no soy lo suficientemente inteligente como para ser un desarrollador de Cocoa .

+0

No es un mal plan. Lo tendré en cuenta para el futuro! –

+0

Solo para agregar más información, obtienes restricciones moradas porque IB piensa que la vista será ambigua sin las restricciones. Esto debería resolverse reduciendo la prioridad sobre otra restricción válida-deseada. Y es correcto – Vignesh

6

Al reducir la prioridad de las restricciones violetas, también se podrán editar.

-2

Al hacer clic derecho en la restricción, seleccione "Promover a la restricción del usuario". La próxima vez que haga clic en restricción, podrá eliminarla, ya que ahora está en manos del usuario/desarrollador.

+1

Eso no funcionará. Cuando lo elimine, la restricción del sistema volverá a aparecer. –

2

Tuve un escenario similar, donde había dos etiquetas multilínea. Según el tamaño del contenido, ambos deben redimensionarse.

Two multiline labels

Cuando la primera etiqueta cambia de tamaño, se sobrescribe la segunda etiqueta debido a que la segunda tenía una restricción de espacio vertical ("Top Espacio para SuperView = 40" que es una restricción por defecto del sistema - de color púrpura), que No pude eliminar/modificar.

Si traté de modificarlo como "Top Space to SuperView> = 40", se cambiaría a una restricción de usuario (color azul) y se crearía una nueva restricción púrpura "Top Space to SuperView = 40" automáticamente.

supongo que esto podría ser la razón:

Cuando traté de cambiar la restricción a "Mejor Espacio de Superview> = 40", la posición por defecto de la etiqueta no está definida:> = no especifica un valor predeterminado posición. Especifica solo un 'rango de posiciones'. Luego agregué una nueva restricción al seleccionar ambas etiquetas juntas y establecer el espacio entre ellas como una constante. adding constraint between two labels

Ahora, dado que la primera etiqueta tenía una posición definida (espacio vertical = 15) desde el borde superior y la segunda etiqueta estaba 5 puntos por debajo de la primera, la segunda etiqueta tenía una posición vertical definida. Pude borrar la restricción de espacio vertical violeta.

Ahora, si elimino la restricción entre las dos etiquetas, la segunda ya no tendrá la posición definida y el sistema creará automáticamente una restricción púrpura para la etiqueta.

Cuestiones relacionadas