Если вы действительно хотите получить кадр 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](https://i.stack.imgur.com/XBntw.png)
Он автоматически изменил размер изображения до 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](https://i.stack.imgur.com/b3p3o.png)