Автоматическое изменение размера titleView в NavigationBar с автоматическим размещением

Мне нужен пользовательский UIView в моем UINavigationBar между левым и правым BarButtonItem, но как можно более широким. По этой причине я добавил UIView в IB в NavigationBar. С отключенным автоопределением все работает, как ожидалось, с масками автоизменения размеров. Но в моей раскадровке с включенным автоопределением я просто не могу заставить ее работать. Не похоже, что я могу установить какие-либо ограничения в IB для titleView. Если я поверну свое устройство в альбомный режим, UIView останется той же ширины. Что мне нужно сделать, чтобы titleView заполнил пространство между моими UIBarButtonItems с включенным автоопределением?

Спасибо за любую помощь

Линар


person Linard Arquint    schedule 14.08.2013    source источник


Ответы (2)


Я решил проблему в своем коде следующим образом:

 - (void)willAnimateRotationToInterfaceOrientation:(__unused UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
 {
 [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];

    CGSize navigationBarSize = self.navigationController.navigationBar.frame.size;
    UIView *titleView = self.navigationItem.titleView;
    CGRect titleViewFrame = titleView.frame;
    titleViewFrame.size = navigationBarSize;
    self.navigationItem.titleView.frame = titleViewFrame;
 }

Я не нашел другого решения (с автоматическим изменением размера), но я открыт для новых и / или лучших решений

Линар

person Linard Arquint    schedule 16.08.2013

Вы можете добавлять ограничения в код.

В viewDidLoad вы можете сделать что-то вроде этого:

UIView *titleView = [[UIView alloc] initWithFrame:CGRectZero];
self.navigationItem.titleView = titleView;
UIView *titleViewSuperview = titleView.superview;
titleView.translatesAutoresizingMaskIntoConstraints = NO;
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:titleViewSuperview attribute:NSLayoutAttributeLeading multiplier:1 constant:0]]; // leading
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:titleViewSuperview attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; // top
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleViewSuperview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:titleView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; // width
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleViewSuperview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:titleView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]]; // height
person ma11hew28    schedule 31.10.2013
comment
Я получаю сбой при ограничении ширины, потому что titleSuperView имеет значение null. Кому-нибудь еще повезло? - person djibouti33; 12.11.2013
comment
По крайней мере, в iOS 7 вы не можете изменять ограничения для UINavigationBar, управляемые контроллером. - person Andy; 23.04.2014
comment
@Andy, так как вы можете предоставить пользовательскому представлению информацию (x, y)? - person Petar; 25.11.2014