Как вы определяете размер / фрейм пользовательского UINavigationItem.titleView? - PullRequest
5 голосов
/ 27 ноября 2011

После создания пользовательского представления и присвоения его свойству navigationItem.titleView оно отображается следующим образом

enter image description here

с пользовательским представлением, заполняющим пространство между двумя кнопками. Следовательно, пользовательский вид не центрируется на панели навигации. Как определить рамку представления в свойстве .titleView? Я хочу центрировать текст на панели навигации, скажем, под отметкой времени.

Ответы [ 2 ]

14 голосов
/ 28 ноября 2011

Если вы действительно хотите получить кадр titleView (в координатном пространстве вашего верхнего уровня), вы можете сделать это:

[self.navBar layoutIfNeeded];
CGRect titleViewFrameInTopLevelViewSpace = [self.navigationItem.titleView
    convertRect:self.navigationItem.titleView.bounds
    toView:self.view];

Вам нужно сделать layoutIfNeeded, если вы только что присвоили titleView, потому что по умолчанию панель навигации не будет размещать свои подпредставления до следующего прохода цикла выполнения.

Тем не менее, titleView будет центрироваться автоматически, если он подходит. Я думаю, что вы устанавливаете рамку (или границы) вашего собственного представления слишком большим. Я проверил это двумя способами:

  • Я настроил titleView прямо в XIB. Я просто перетащил вид из библиотеки объектов в центр панели навигации:
    XIB screen shot
    Он автоматически изменил размер изображения до 128x33. Ручки изменения размера позволяют мне регулировать размер. Он остается в центре, пока не перекрывает кнопку «Категоризация» Затем он сдвигается влево.

  • Я установил свойство titleView в viewDidLoad:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 33)];
        customView.backgroundColor = [UIColor greenColor];
        self.navItem.titleView = customView;
     }
    

    Результат выглядит так:
    Simulator screen shot

2 голосов
/ 27 ноября 2011

Вы можете получить ширину leftBarButtonItem и rightBarButtonItem после их установки, а затем использовать ее, чтобы определить, как центрироваться в представлении, которое вы предоставляете для titleView. Это может делать то, что вы хотите?

...