2014-02-05 1 views
1

У меня есть метод создания titleView.Проблема, когда кадр UINaviationsItem titleView установлен неправильно, когда titleView настроен на анимацию mid push

- (void) makeTitleView { 
    UIImage * image = [UIImage imageNamed:@"myImage"]; 
    UIImageView * imageView = [[UIImageView alloc] initWithImage:image]; 

    self.navigationItem.titleView = imageView; 
} 

Это прекрасно работает при вызове в viewDidLoad:

- (void)viewDidLoad 
{ 
    [self makeTitleView]; 
} 

Correct title view

Однако, если вызывается после небольшой задержки (меньше, чем время pushViewController:animated: анимации):

- (void)viewDidLoad 
{ 
    double delayInSeconds = 0.1; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self makeTitleView]; 
    }); 
} 

Тогда в заголовке указано неправильное f отросток:

Incorrect title view

В конце анимации каркасные сортирует вне.

Это может показаться умышленным, чтобы установить заголовок через 0,1 секунды, но эта ситуация возникает в одном из моих приложений. TitleView необходимо установить после сетевого запроса, который возвращается после следующего цикла цикла, когда результаты исходят из кеша.

Я могу избежать этой проблемы, но просто задерживается на более длительный период времени или вызывая метод в viewDidAppear:, но оба решения вводят ненужные задержки. Есть ли другой способ исправить это?

ответ

0

Вы можете сделать вид названия заполнителя и сделать свое население после завершения сетевого запроса.

Ваша текущая установка кажется немного хрупкой - обычно в любое время вам нужно отправить dispatch_after, либо она работает над некоторой ошибкой UIKit, либо вам нужно перестроить свой подход.