Я посмотрел на проблему с некоторым попаданием и попытался найти следующие факты:
- Если UINavigationBar не имеет rightBarButtonItem, titleView смещается вправо на ~ 30 пунктов.
- Может быть воспроизведено для leftBarButtonItem. Но я не пробовал.
В сценарии, где установлен titleView по умолчанию для UINavigationBar (без изменений по умолчанию для rightBarButtonItem). И затем новый UIView помещается в стек навигации, который имеет rightBarButtonItem. Теперь, если это представление всплыло [с кнопкой назад], панель навигации удалит rightBarButtonItem. И это будет учитывать странное смещение, которое смещает titleView в сторону.
Как я исправил проблему, было так:
self.navigationItem.titleView = myCustomTitleView;
// Fake right button to align titleView properly.
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 1)]];
// Width equivalent to system default Done button's (which appears on pushed view in my case).
rightBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
Теперь все сладко. yummmm.