Как имитировать изменяемый размер StatusBar в приложении Spotify iOS - PullRequest
3 голосов
/ 11 октября 2011

Я пытался выяснить, как Spotify создает пользовательский интерфейс, когда приложение переходит в автономный режим.Они создают впечатление, что размер StatusBar изменился, но на самом деле они просто отображают представление ниже и изменяют размеры всех контроллеров в приложении.Я пробовал создавать подклассы UINavigationController, подклассы UIWindow, изменять размер окна, но, похоже, ничего не работает для каждого случая.

Интересная вещь в приложении Spotify заключается в том, что их решение все еще работает, когдаСобственные подклассы iOS UIViewController представлены модально (как показано на рисунке ниже, показывая Apple MFMailComposeViewController - вы можете сказать, что это не пользовательский контроллер из-за UIBarButtonItems).

Если у кого-то есть пониманиекак это возможно, это было бы здорово.

Spotify iOS app

1 Ответ

0 голосов
/ 13 октября 2011

это очень опасно.Я делал в прошлом, и мне снились кошмары.Ниже приведен код, который работает в iOS4 и поддерживает изменения ориентации.

- (void) _adjustViewControllerforTicker {
    TickerView* vv = [ApplicationContext getTickerView];
    if ([PreferenceDataModel isFxTickerOn]&& self.navigationController.view.frame.origin.y==0) {

    CGRect tableRect = self.tableView.frame;
    self.tableView.frame = CGRectMake(tableRect.origin.x,tableRect.origin.y, tableRect.size.width, tableRect.size.height -20);
    UINavigationController *nav = self.navigationController;
    CGRect gframe = CGRectOffset(self.navigationController.view.frame, 0, 20);
    self.navigationController.view.frame = gframe;
    if (!vv) {
        vv = [[TickerView alloc] initWithFrame:CGRectMake(0, 0, 480, 20)];

        [nav.view addSubview:vv];
        [vv release];
        self.tableView.contentInset=UIEdgeInsetsMake(0,0,20.0,0.0);
        [ApplicationContext setTickerView:vv];
    }

    if (![PreferenceDataModel isTickerOn]) {
        self.tableView.contentInset= UIEdgeInsetsZero;
        if (vv){
           [vv removeFromSuperview];
           vv=nil;
           [ApplicationContext setTickerView:nil];
    }
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation          { 
    [self _adjustViewControllerforTicker];
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
  [self _adjustViewControllerforTicker];
  TickerView* vv = [ApplicationContext getTickerView];
  if ([vv count]) {
    [vv startAnimation];
  }
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self _adjustViewControllerforTicker];
}

А вот как это выглядит:

enter image description here

...