2014-12-09 1 views
0

Я более или менее закончил все свое приложение и, очевидно, просто понял, что макет не подходит только для iPhone 4S. Я мог бы начать использовать Auto-layout, но он много перепутал мои проекты, поэтому я подумал о другом методе: загрузка другой раскадровки для iPhone 4s. я нашел следующий код в Интернете, который, кажется, работает для всех:iOS - загрузка другой раскадровки для iPhone 4S не работает

- (UIStoryboard *)grabStoryboard { 

UIStoryboard *storyboard; 

// detect the height of our screen 
int height = [UIScreen mainScreen].bounds.size.height; 

if (height == 480) { 
    storyboard = [UIStoryboard storyboardWithName:@"StoryboardIphone4s" bundle:nil]; 
    // NSLog(@"Device has a 3.5inch Display."); 
} else { 
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    // NSLog(@"Device has a 4inch Display."); 
} 

return storyboard; 
} 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storyboard = [self grabStoryboard]; 

    // show the storyboard 
    self.window.rootViewController = [storyboard instantiateInitialViewController]; 
    [self.window makeKeyAndVisible]; 
return YES; 
} 

У меня нет никаких ошибок на все: мои проектные нагрузки отлично. Но независимо от размера, он показывает один и тот же раскадровки. NSLog работает отлично, но тот же Раскадровка загружается.

Что может быть причиной этого?

Благодаря

ответ

1

Я считаю, что ваша проблема связана с [раскадровки instantiateInitialViewController]. Он может не загружать представление, и поэтому Xcode предпочитает не изменять rootViewController, а не устанавливать его в null.

Попробуйте установить идентификатор раскадровки исходного изображения iPhone4S и загрузите его в grabStoryboard, как показано ниже.

  1. В StoryboardIphone4s.storyboard установите идентификатор раскадровки исходного вида на «main4SView».

  2. В AppDelegate.m didFinishLaunchingWithOptions изменение приложения к:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
        // show the storyboard 
        [self grabStoryboard]; 
        [self.window makeKeyAndVisible]; 
        return YES; 
    } 
    
  3. В AppDelegate.m изменения grabStoryboard к:

    - (UIStoryboard *)grabStoryboard { 
    
        UIStoryboard *storyboard; 
    
        // detect the height of our screen 
        int height = [UIScreen mainScreen].bounds.size.height; 
    
        if (height == 480) { 
         storyboard = [UIStoryboard storyboardWithName:@"StoryboardIphone4s" bundle:nil]; 
    
         //load the intial view controller from iPhone4S storyboard 
         //and make it the rootViewController 
         self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"main4SView"]; 
         NSLog(@"Device has a 3.5inch Display."); 
        } else { 
         storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
         NSLog(@"Device has a 4inch Display."); 
        } 
    
        return storyboard; 
    } 
    

Позвольте мне знать, как она идет.

+0

Спасибо за ответ. К сожалению, это действительно не помогает. Все еще отображает MainStoryboard. Странно то, что нет никакой ошибки .. –

+0

My bad! Он работает отлично. Благодарю. Мне пришлось немного настроить ваш код, потому что yuo не вызывал этот метод. –

+0

Отличный улов! Я исправил свой ответ для будущих зрителей. – ateich

0

Не могли бы вы напечатать переменную высоту и посмотреть, что вы получите обратно. Не может быть того, чего вы ожидаете. Извините, не могли бы добавить комментарий, по-видимому, нужно 50 репутации

+0

Переменная высоты отлично работает, поскольку, как я уже сказал, NSLog распечатываются хорошо. –

Смежные вопросы