Problemas de diseño después de actualizar a Xcode 8

102

Aquí hay un antes y un después de una de mis pantallas después de actualizar a Xcode 8.
Todo lo que hice fue abrir mi main.storyboard y desde allí, construí y ejecuté mi aplicación en mi teléfono.
En mi control de versiones, puedo ver que Xcode está haciendo muchos cambios en mi main.storyboard con solo abrirlo.
Cada vez que elimino esos cambios, puedo ver lo que uso para ver en Xcode 7.3.1.
Pero, tan pronto como vuelvo a abrir el generador de interfaces con mi guión gráfico, veo que esos cambios vuelven a su lugar.

¿Hay algo que pueda hacer aquí?

Antes de Xcode 8

ingrese la descripción de la imagen aquí

Después de actualizar a Xcode 8

ingrese la descripción de la imagen aquí

usuario2726072
fuente
Intente abrir XCode 8 nuevamente con una fuente nueva (guarde los cambios que haya realizado anteriormente). Ahora, cuando abra el guión gráfico, resalte todos los elementos de la interfaz de usuario y haga clic en "Actualizar marcos". Esto podría solucionar su problema.
d1str0
6
¿Podría presentar un error en bugreport.apple.com y adjuntar el guión gráfico para el que esto está sucediendo? Nos gustaría analizar esto más a fondo.
Quinn Taylor
1
Tengo exactamente el mismo problema. Después de abrir mi guión gráfico en Xcode8 y aceptar el diálogo "Elegir una vista de dispositivo inicial", todo está actuando de forma extraña. Cuando actualizo todos los marcos, el IB se ve bien, pero después de compilar, la aplicación está totalmente rota. Probado con 4 aplicaciones.
Cherrypig
@QuinnTaylor Tengo un problema similar, después de que Xcode 8 convierte mi guión gráfico, los UIImageViews en UITableViews no muestran ningún contenido, aunque su esquema está visible en Debug View Hierarchy. Otros objetos de la misma clase que están en UICollectionViews no son los afectados.
Manuel
XIB o Storyboard se establecen de forma predeterminada como la versión anterior 7.xy Guardar y cerrar. Solución temporal, pero funciona. No vuelva a abrir una vez que haya hecho Guardar y cerrar. De lo contrario, es necesario seguir los mismos pasos desde el principio.
Bhavesh Kumbhani

Respuestas:

111

Tuve un problema similar con las imágenes de tableview que no aparecían una vez que convertí el archivo del guión gráfico para que fuera compatible con Xcode8. Esto parece un error con Xcode8, así que hasta que se publique una corrección de errores, aquí hay una solución:

  1. Abra su guión gráfico en Xcode 8 y elija una vista de dispositivo inicial. Realice los cambios como lo haría normalmente.
  2. Una vez que haya completado sus cambios, seleccione el guión gráfico -> Inspector de archivos -> Se abre en -> Seleccione 'Xcode 7.x'.

ingrese la descripción de la imagen aquí

  1. Seleccione 'Guardar y cerrar' cuando se le solicite
  2. Los cambios de su guión gráfico se guardarán y su guión gráfico funcionará como lo hacía antes de Xcode8.

Cuando necesite realizar otros cambios en el archivo del guión gráfico, siga estos pasos nuevamente.

David T
fuente
Wow +1 por esto seguro. Luché con esto en iOS 10 dentro de mi TodayExtension. No fue hasta que reduje las cosas, analizando los git diffs, que vi que Xcode 8 estaba agregando ediciones sospechosas de storyboard xml. Después de guardar el documento del storyboard para Xcode 7 (después de hacer mis ediciones), ahora puedo compilar y enviar usando Xcode 8 para iOS 10. Gracias.
John Erck
Seguro que parece un error. Guardar como aperturas en Xcode 7.x funcionó para mí como una solución temporal.
Steve A
Pasé los últimos 3 días arreglando todo el diseño roto de un lugar a otro en Xcode8 hasta que encontré esta publicación. Probablemente debería confiar más en personas como ustedes que en Apple. No puedo creer que esto haya desperdiciado tanto tiempo. ¡Muchas gracias David por esto!
Xu Yin
@XuYin ¿Deberíamos hacer esto para cada guión gráfico? Quiero decir, ¿qué pasa si tengo otro guión gráfico en mi proyecto? ¿Qué pasa con los archivos Xib? ¿Debería hacerlo por ellos también?
Miel
@Honey no hice eso en el guión gráfico, pero lo hice en cada archivo xib con el que tengo problemas. pero creo que es posible que desee probarlo también en el guión gráfico si ve un problema de diseño extraño. ya que esa solución solo tomará como 5 segundos. y después de reconstruir la aplicación, debería poder ver la solución muy rápidamente.
Xu Yin
14

XIB o Storyboard se establecen de forma predeterminada como la versión anterior 7.xy Guardar y cerrar. Solución temporal, pero funciona. No vuelva a abrir una vez que haya hecho Guardar y cerrar. De lo contrario, es necesario seguir los mismos pasos desde el principio.ingrese la descripción de la imagen aquí

Bhavesh Kumbhani
fuente
6
Esto no ayuda porque necesito trabajar en el archivo. Todo lo que hace es guardar el archivo para compatibilidad con versiones anteriores. No permite que el xib se edite en Xcode 8.
jowie
Estoy haciendo esto, pero nuevamente cuando selecciono el archivo xib en el menú desplegable, solo muestra xcode 8.0 ...
jayant rawat
8

Eh, el mismo problema. Logré arreglarlo parcialmente de la siguiente manera ( para Xcode Versión 8.1 (8B62) )

En el esquema del documento de Storyboard, hice clic en cada escena que tenía la flecha amarilla que indicaba algunos problemas de diseño (número 1 en la captura de pantalla)

Después de esto, para cada escena problemática, tuve que hacer clic en el ícono pequeño "Actualizar cuadros" (Número 2 en la captura de pantalla) que solucionó todos los problemas de diseño por escena.

ingrese la descripción de la imagen aquí

Sin embargo, una escena en mi caso todavía estaba en estado de llanto después de la transición de Xcode7 a Xcode8. Tuve que arreglarlo manualmente ajustando restricciones o agregando restricciones faltantes.

Uf, no es una agradable sorpresa de XCode8 y Storyboards. Si usó el editor de AppCode, no tendrá ese problema, ya que no es compatible con Storyboards; P

¡Buena suerte!

TekMi
fuente
7

Xcode 8.1 Beta 2 resuelve este problema. Por favor, consulte este enlace de descarga.

https://developer.apple.com/download/

Maniganda saravanan
fuente
4
No lo creo ... :(
Vaibhav Saran
Xcode 8.3.2 tiene el mismo problema. Fck Xcode y Apple :(
lee
6

Siga los hilos para cualquier posible solución: (creo que les sucede a muchos desarrolladores).
Xcode 8 GM seed Storyboard issue
Xcode 8 - Los storyboards anteriores se distorsionan

(usé anyH anyW ancho 600) Cuando Xcode se actualizó a Xcode 8, cambió el tamaño de todos mis ViewControllers. Como resultado, todo el diseño se distorsionó.
Actualmente veo solo 3 soluciones para el problema (no confiaría en esperar una solución pronto).

Vaya a cada Viewcontroller y arréglelo por Update Frames.

2. Vaya al ViewController principal, Size Inspector -> Freeform -> 600ya que se infiere que la mayoría de los controladores cambiará el tamaño de todos ellos (tenga cuidado con el impacto de las nuevas funciones que Apple desea presentar).

3. Descarte los cambios en git para el guión gráfico (no lo sugeriría porque Apple también insertó algunas actualizaciones que pueden ser importantes para Xcode).

Enlace adicional para las nuevas funciones de AutoLayout en Xcode 8 (WWDC16): Making Apps Adaptive, Part 1

Mike.R
fuente
1
La opción 1 es la más sensata y me funcionó. Como señala Mike.R, tenga cuidado de intentar "engañar" a XCode para que solucione las cosas, ya que es inevitable que haya más problemas en el futuro.
arcady bob
También usé la opción 1 (creo que es más segura). Pero lleva mucho tiempo.
Mike.R
5

En mi caso, funcionan las soluciones sugeridas por Akhil Kateja y también necesito restablecer el Ancho y Alto de la vista principal:

1) Establecer el tamaño de la vista en forma libre

ingrese la descripción de la imagen aquí

2) Restablezca el ancho y alto de la vista al tamaño original:

ingrese la descripción de la imagen aquí

Finalmente guarda y listo.

cristiano mini
fuente
4

Para mí, la solución fue simplemente hacer clic en el UIViewController que tiene problemas y luego Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Reorganizó las vistas para que se ajustaran a las restricciones existentes en función de la vista predeterminada recién seleccionada (iPhone 7 en mi caso).

También tenga en cuenta: si recibe una advertencia de Vista perdida de la barra de navegación como lo hice yo, simplemente seleccione UINavigationController / UIViewController y luego Attributes Inspector > Bar Visibility > Shows Navigation Bar, desactívelo y vuelva a activarlo .

whycodewhyyyy
fuente
3

Configurar el tamaño de la vista en forma libre desde inferido funcionó para mí. Se puede encontrar bajo el título Métricas simuladas en el Inspector de atributos .

Akhil Kateja
fuente
3

Tuve el mismo problema y lo resolví forzando la actualización de las restricciones de vista del controlador. Ponga el siguiente código en su función viewDidLoad ()

self.view.layoutIfNeeded()
Bill Panagiotopoulos
fuente
1
¡Salud Bill! que 'layoutIfNeeded' funcionó para mí! (Después de probar todo lo demás durante horas ...)
Ethan Halprin
3

Seleccioné cada controlador e hice clic en "Actualizar marcos" y arreglé el diseño.

Mayckon Barbosa
fuente
3

La respuesta de @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) no funciona en mi caso, así que si estás en mi misma situación, prueba esto:

En el caso de que tenga todos sus dispositivos actualizados a iOS 10+, esta versión de Xcode no reconocerá esos dispositivos como dispositivos compatibles. Entonces, prueba con este truco:

  • Vaya a: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Copie las carpetas relacionadas con iOS 10 o 10.1 en: / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Abra el proyecto con Xcode 7.3.1 (reinicie Xcode si ya lo tiene abierto)
  • Seleccione su dispositivo iOS 10+ conectado
  • Empuje Ejecutar

Nota: Las nuevas funciones como Swift no estarán disponibles con este truco, pero debería poder cargar y construir su proyecto.

goe
fuente
3

Espero que esto ayude

Cuando actualicé Xcode de 7.3 a Xcode 8 y ejecuté la aplicación, algunas de las vistas se muestran perfectamente pero otras están distorsionadas. Luego, verifiqué el archivo de plumilla y me pidió que eligiera un tamaño de dispositivo en particular y luego mostrara la plumilla de acuerdo con eso tamaño del dispositivo que por supuesto no Any-Any(Xcode 7.3) . Entonces, todos los archivos nibs no se muestran de manera correcta.

Solución de trabajo de mí: - presione la flecha amarilla como se muestra en la imagen de abajo

ingrese la descripción de la imagen aquí

aparecerá una ventana emergente que muestra opciones como

ingrese la descripción de la imagen aquí

elija Update Framescon Apply to all views in containercomprobado. Resolverá alrededor del 90% de la IU distorsionada y el resto del problema de restricciones de diseño automático se puede resolver manualmente.

Anurag Bhakuni
fuente
Esto también podría estropear los diseños. En mi humilde opinión, esto debe hacerse con mucho cuidado, una vista a la vez y verificando si las cosas funcionaron antes de continuar.
Brainray
sí, por supuesto, necesita dedicar algo de tiempo y esta solución puede ayudarlo a más tiempo, como cuando desea actualizar parte de su interfaz de usuario.
Anurag Bhakuni
1

Para solucionar un problema similar, configuré el xib como Freeform (no inferido) Y guardé el archivo xib como compatible con Xcode 7.x. Ambos pasos fueron necesarios en mi caso. ¡Espero que eso ayude!

Juan Sagasti
fuente
1

Noto un nuevo botón en Xcode 8.2, (verifique el círculo naranja en la imagen). Te dará un poco de ayuda.

Pasos: 1. Abra el guión gráfico y seleccione el dispositivo que desee. 2. Simplemente seleccione el controlador de vista. 3. Haga clic en el botón mencionado (como en la imagen). 4. Se actualizará el marco para ese controlador de vista y podrá continuar con él.

No encontré ninguna solución mejor que esta. Responda si encuentra uno.

Captura de pantalla de IB

Shahul Hasan
fuente
No pasó nada.
Muju
0

actualizar las restricciones y las subvistas de diseño en viewdidload resuelve el problema

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
karthikPrabhu Alagu
fuente