Pregunta Storyboard en Xcode es tan lento


Tengo 150 UIViewController en Storyboard y desplazarme entre estas Vistas es muy lento. No puedo acercar ni alejar la imagen con facilidad y me toma un tiempo muy serio hacer pocilga.

Estoy en MBPR e instalé Xcode 4.4

Spec: 2.3GHz / 16G / 256 que creo que es suficiente para manejar tal cosa.

¿Hay alguna opción, configuración o consejos / trucos para tener tantas vistas en el guión gráfico y no te pierdas el rendimiento?

NOTA: He hecho todas las soluciones posibles (eliminación de caché y espacio de trabajo). No funcionó Tiene algo que ver con la cantidad de UIViewController en Storyboard.

Gracias

Actualización 2016: Solo para actualizar esta pregunta, ya que hay una nueva función en Xcode 7 que le permite refactorizar el Guión gráfico en varios guiones gráficos.

Refactoring Storyboards https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

Si busca el término "refactorización de guiones gráficos", encontrará buenos tutoriales :)


11
2017-07-27 16:29


origen


Respuestas:


Definitivamente use múltiples guiones gráficos para esto. No conozco ninguna limitación en el uso de guiones gráficos, pero intentar procesar todos esos códigos de interfaz de usuario de una vez es difícil para su máquina y también es difícil de entender para los desarrolladores.

Intenta adivinar lógicamente tus guiones gráficos en categorías como: "profileSB, feedSB, mapSB, messagesSB, settingsSB"

Aquí hay algunos buenos tutoriales sobre la creación de estos:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/


6
2017-10-30 11:48



Se considera mejor práctica dividir los guiones gráficos en muchos módulos diferentes (cada uno en un guión gráfico aparte). Eliminará estos problemas de rendimiento que tiene y también tiene otras ventajas, como facilitar la gestión en general (sin conflictos masivos de SVN, etc.).

Sin embargo, tuve otro problema que estaba causando retraso en el guión gráfico. Tenía aproximadamente 25 controles de vista y estaba recibiendo MUCHO retraso, pero solo cuando Xcode se estaba ejecutando en un monitor externo.

Me di cuenta de que si deshabilitaba "diseño automático" para el guión gráfico, el desfase desaparecería por completo. Revertí este cambio y luego seguí el siguiente proceso: -Delete a ViewController -prueba si todavía está retrasado -si todavía rezago revertir cambios

Eventualmente encontré un cierto ViewController que si se eliminaba detenía todo el retraso. Luego revertí esto y revisé las vistas para ver qué vista causó el desfase. Eventualmente reduje esto a un "UIButton" dentro de un "UIBarButtonItem". Creo que cambié la propiedad "Tipo" en el botón, luego la cambié y el retraso se detuvo. Desde SVN parece que el marco fue cambiado en el archivo .storyboard. Después de este punto, el retraso nunca volvió.

TLDR: El retraso del guion gráfico no siempre se debe a que tiene demasiados elementos en el guión gráfico. Logré deshacerme de un problema de retraso haciendo que Xcode volviera a hacer un diseño.

Espero que mi experiencia ayude a otra persona a diagnosticar / resolver sus problemas. Estuve trabajando durante aproximadamente 0.5 años antes de que finalmente me molestara y tratara de resolver el problema.


7
2017-08-17 14:54



150 ViewControllers en un Storyboard suena muy mal para mí. Intenta minimizar tu flujo o dividirlo en varios guiones gráficos si realmente necesitas tantos


3
2017-08-13 07:14



Tuve un UIStoryboard con 10 o más UIViewControllers y adicional ContainerViews. Después de diseñar las vistas y personalizar más y más, UIStoryboard tiene cada vez más pereza

Mi enfoque era configurar las vistas dentro de una sola UIStoryboards. Cargando los controladores se hace dentro de mi menú, donde configuro un NSArray con todos los identificadores para el UIViewController que también deben configurarse dentro del UIStoryboard:

enter image description here

Al cargar el menú, recorro el NSArray y carga el UIViewControllers por identificadores del específico UIStoryboard. Este es el lugar donde necesitaba implementar un interruptor, para los diferentes UIStoryboards:

self.arrayVCAll = [NSMutableArray new];
for ( NSArray *array in _arrayViewControllerAll ){

    NSMutableArray *arrayTemp = [NSMutableArray new];

    for (UIViewController *vc in array ){
        NSString *strViewController = [NSString stringWithFormat:@"%@", vc];
        UIStoryboard *storyboard;

        if( [strViewController isEqualToString:@"CustomOneStoryboard"] ){
            storyboard = [UIStoryboard storyboardWithName:@"FirstVC" bundle:nil];

        } else if( [strViewController isEqualToString:@"CustomTwoStoryboard"] ){
            storyboard = [UIStoryboard storyboardWithName:@"SecondVC" bundle:nil];

        } else {
            storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        }

        UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:strViewController];

        MyNavController *nav = [[MyNavController alloc] initWithRootViewController:controller];
        [arrayTemp addObject:nav];
    }

    [self.arrayVCAll addObject:arrayTemp];
}

En mi caso, solo hubo un problema con los segmentos después de separar la inicial UINavigationController de mi UIViewControllers. Los segmentos no presionarán a un Control de navegación, si no hay una inicial UINavigationController. Por eso agregué un UINavigationController en cada UIViewController (de mi NSArray) por lo que UIStoryboardSegue se hará correctamente los UINavigationController tampoco necesita estar conectado a una clase, solo inclúyelo dentro del UIStoryboard y conectarlo a la primera UIViewController.


1
2018-03-26 12:33