Пользовательское название VIEW на UinavigationController анимация неправильно
-
02-10-2019 - |
Вопрос
Я, наверное, делаю что-то не так, потому что это выглядит немного глупо.
Я устанавливаю пользовательский заголовок 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 (не моим пользовательским заголовком), бесплатно.