Когда я должен создать свой UINavigationBar?
У меня есть ViewController, у которого есть метод для разработки UINavigationBar, SubViewController, который наследуется от ViewController и вызывает его метод проектирования, а также LookingViewController и SecondViewController, которые наследуются от SubViewController.
ShowingViewController является корневым контроллером UINavigationController и выполняет переход "Показать" к SecondViewController. У них обоих есть свойство NSString "presentProperty". ViewController устанавливает пользовательский titelView для панели навигации, которая показывает строку свойств.
Мой вопрос: где я должен вызвать метод проектирования ViewController?
Когда я вызываю его в viewWillLoad, я не буду работать, когда я переключаюсь на SecondViewController, потому что метод изменяет панель навигации "старого" ShowingViewController.
Когда я вызываю его в viewDidLoad, пользователь увидит ранее не спроектированную панель навигации.
Код моего метода проектирования:
if (self.navigationController.navigationBar) {
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 21)];
NSMutableAttributedString *titleText = [[NSMutableAttributedString alloc] initWithString:self.presentingProperty];
[titleText addAttribute: NSForegroundColorAttributeName value: [UIColor whiteColor] range: NSMakeRange(0, self.presentingProperty.length)];
[titleText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Avenir-Heavy" size:21] range:NSMakeRange(0, self.presentingProperty.length)];
[titleLabel setTextAlignment:NSTextAlignmentCenter];
[titleLabel setAttributedText: titleText];
[self.navigationController.navigationBar.topItem setTitleView:titleLabel];
}
Спасибо за помощь.
2 ответа
Вы можете попробовать это.
- (void)viewDidLoad
{
self.navigationItem.titleView = <your titleView>
}
- (void)viewWillLayoutSubviews
{
<your titleView>.frame = CGRectMake(....)
}
Вы должны настроить titleView для панели навигации в:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear: animated];
<your titleView code here>
}
Это вызывается после viewDidLoad в первый раз и вызывается позже, когда другие ViewController выше текущего выталкиваются из стека навигации. Хорошую диаграмму состояний жизненных циклов ViewController можно найти в документации по адресу https://developer.apple.com/documentation/uikit/uiviewcontroller
В отношении стиля вы также можете установить titleView с помощью этого кода:
self.navigationItem.titleView = <your-view>;