Lo que he estado haciendo recientemente es agregar una declaración definir en cualquier clase que necesite para verificar el dispositivo. Esto también se puede hacer en cualquier archivo de encabezado global.
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
La prueba es de bool Detect iphone 5 4" screen.
bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5) {
// Setup For iPhone 5 Screen Size
UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"MyiPhone5StoryboardName" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
}
Esto funciona muy bien si ya está utilizando guiones gráficos, y sólo desea cambiar el guión gráfico de los valores predeterminados que su proyecto se inició con dispositivos para el iPhone 5. Si está empezando desde cero con un proyecto existente que no sea Storyboard, puede hacerlo de esta manera.
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5) {
// Load iPhone 5 Storyboard
UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
}
else if (IS_IPAD) {
// Load IPAD StoryBoard
UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
}
else {
// Load the iPhone 3.5" storyboard
UIStoryboard *storyBoard;
storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
}
Cuando comienzo un proyecto ahora yo diseño del iPhone versión 3.5" en guiones gráficos (si estoy usando guiones gráficos), a continuación, cuando haya terminado con ese diseño de entrar en mis archivos de proyecto y busque el archivo del guión gráfico. Desde un archivo de guión gráfico es simplemente un archivo del formato XML, puedo tomar ese archivo y cargarlo en mi editor de texto favorito y cambiar dos etiquetas.
Convertir iPhone al iPad
- en la parte superior del archivo de encontrar
targetRuntime="iOS.CocoaTouch
"
- Cambiar para
targetRuntime="iOS.CocoaTouch.iPad"
- anuncio de la parte inferior del archivo que se puede encontrar este
<simulatedScreenMetrics key="destination" type="retina4"/>
- Cambiar esto a
<simulatedScreenMetrics key="destination"/>
El último elemento sólo aparecerá si el archivo principal del guión gráfico está configurado para la pantalla de iPhone de 4 ".
Lo que es importante aquí es que si solo agrega un iPhone 5 a un proyecto existente, solo necesita el primer cheque para anular el predeterminado y cargar su archivo especial del guión gráfico. Esto literalmente me salvó de tener que diseñar manualmente todos los objetos en el código para iPhone 5.
También debe considerar el uso de resortes y puntales para cambiar el tamaño de su vista en lugar de duplicar su guión gráfico, especialmente si todo lo que está cambiando es el diseño. Podría conducir fácilmente a una solución mucho más fácil de mantener, y admitirá versiones anteriores de iOS. –
Usando las respuestas proporcionadas, creé una categoría para hacer esto más fácil - https://gist.github.com/4003438 –
no podría ser más fácil ... http://stackoverflow.com/a/13040627/294884 o http://stackoverflow.com/a/12799462/294884 – Fattie