Пользовательское название VIEW на UinavigationController анимация неправильно

StackOverflow https://stackoverflow.com/questions/3697260

Вопрос

Я, наверное, делаю что-то не так, потому что это выглядит немного глупо.
Я устанавливаю пользовательский заголовок View (в форме UILABEL) на моем UinavigateController, который одинаково на каждой странице. Чтобы облегчить это, я создал функцию в моем делегате приложения, чтобы правильно отобразить этикетку. Затем я называю эту функцию в любых подпроизводах сразу после того, как я нажимаю его на стек навигации.
Вот код (который, вероятно, имеет больше смысла, чем мое объяснение):

//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
    UILabel *label = [[UILabel alloc] init];
    // set up label attributes
    // ...
    [label sizeToFit]; //without this line my label won't show at all
    [navController.navigationBar.topItem setTitleView:label];
    [label release];
}

// In SomeViewController.m, when pushing another controller onto the stack:
    UIViewController *otherViewController = //initialize other view controller;
    [self.navigationController pushViewController:otherViewController animated:YES];
    [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];

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

Это было полезно?

Решение 2

То, что я заканчивался, использовал изображение с текстом, включенным в качестве фона в заголовке, поэтому, вместо того, чтобы анимироваться гладко, как я хотел изначально, это вообще не анимация.
Учитывая, что это то же самое повсюду, это не так большая сделка, хотя.

Другие советы

Очень поздний ответ на этот вопрос, но я просто бежал в ту же проблему и нашел другой способ решить его, без использования изображения. Думал, я поделился своим решением, поскольку это может помочь кому-то.

В моем случае я устанавливаю пользовательский UILABEL, чтобы быть TILEVIEL, и я понял, что только тогда, когда я устанавливаю свойство TitleView в методе ViewDiDload, это правильно анимает. В некоторых случаях, однако, я еще не знал титул в моей ViewDidload (в некоторых случаях мне нужно было использовать название из http-запроса, например). Итак, мое решение для этих случаев было установить свойство TitleView в My CustomLabel с текстом @ "" в ViewDidload, и всякий раз, когда у меня есть настоящий заголовок, я только изменил свойство текста моей пользовательской этикетки.

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.

   //set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose  viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
   self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}

//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];

Я был в подобной ситуации с YLVA, используя экземпляр пользовательского текстового класса для UINavigationItem's titleView свойство. Тем не менее, я нашел настройку его в viewDidLoad не разрешил анимационный глюк.

Мой обходной путь к проблеме было подождать, пока рассматриваемый контроллер просмотра не был выпущен с стека навигационного контроллера, и в этот момент удалите UINavigationItem's обычай titleView Так что ему никогда не нужно вообще анимировать.

Когда мой UINavigationController Подкласс получает popViewControllerAnimated: Сообщение, я копирую текст заголовка из моего пользовательского текстового поля (UINavigationItem's titleView) в то UINavigationItem's title недвижимость и установить titleView недвижимость для ноль. Тогда UINavigationController Выходит вперед и выскакивает контроллер просмотра, и только стандартная навигационная панель навесает этикетка Network (не моим пользовательским заголовком), бесплатно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top