Я столкнулся с той же проблемой, поскольку iOS 11 и Xcode 9 начали управлять панелями навигации с автоматическим макетом вместо фреймов, вы должны знать о макете панели навигации.
В сеансе 204 WWDC "Обновление вашего приложения для iOS 11" было указано, что UIToolBar и UINavigationBar были обновлены для использования автоматического макета, и чтобы избежать пользовательских представлений с нулевым размером, вы должны знать об этом несколько вещей.
UINavigation и UIToolBar предоставляют позицию, не заботясь об этом.
Вы должны указать размер пользовательского представления одним из следующих способов:
Ограничения по ширине и высоте.
Реализовать встроенный ContentSize
Соедините свои подпредставления через ограничения.
Отвечая на ваш вопрос, я установил titleView с помощью ImageView, указав размер двумя разными способами:
Здесь следует упомянуть одну вещь: использовать ширину 3 для UIImageView. Это важно - если будет 2 (или любое четное число), то изображение будет размытым. Установка clipToBounds=NO и contentMode=UIViewContentModeScaleAspectFill означает, что изображение будет отображаться за пределами ширины представления изображения (хорошо) и будет иметь правильные пропорции.
Если кому-то нужно было сделать это в Swift (4.2):
запишите следующую функцию:
func addMiddleImage(){
//Initialize your UIImage
let yourImage = UIImage(named: "imageName")!.withRenderingMode(.alwaysOriginal)
//Initialize a UIImageView
let imageView = UIImageView(image: yourImage)
//Set your Navigation Bar to the inialized UIImageView
self.navigationItem.titleView = imageView
}