Как использовать изображение в качестве заголовка на большой панели навигации?

Я пытаюсь установить изображение в качестве заголовка на большой панели навигации. Пока что я могу заставить его отображать логотип в центре вверху, как если бы это была стандартная панель навигации.

Я пытаюсь заменить "Все входящие" на изображение.

На данный момент я получаю что-то вроде этого с помощью self.navigationItem.titleView = UIImageView(image #i ageLiteral(resourceName: “logo pic”))

Примечание. Текст заголовка "настройки" не отображается, но логотип / изображение в этом месте отображается как "логотип". (Я хочу, чтобы изображение / логотип были ниже и влево, как на первом рисунке)

2 ответа

Решение

Ну, вы уже можете разместить изображение в панели, так что теперь нужно просто изменить размер представления, чтобы оно соответствовало желаемой позиции.

Сделайте это, изменив размер рамки UIImage, как изменение размера UIImageView один не работает в панели навигации (см. здесь).

Изменить: После некоторых экспериментов мне удалось сделать то, что вы хотите. Это немного нелепо, и вам, возможно, придется выяснить правильные значения размера для себя, но мне удалось достичь этого представления:

логотип расположен в правильной точке

Это было сделано путем добавления UIView под названием "контейнер" в качестве titleView, который затем содержал UIImageView, В то время как "контейнер" в основном ограничен "верхней" частью бара, содержащийся UIImageView теперь может свободно перемещаться внутри панели навигации. Вы можете видеть, как это немного хакерски:

логотип находится прямо над обычным текстом заголовка, контейнер черный

На этом изображении вы можете видеть, что контейнер UIView имеет черный цвет фона. Он не может расти до определенного размера, как titleView, Изучение иерархии представлений показывает, как расположен логотип:

просмотр иерархии

Это было достигнуто с помощью следующего кода:

let logo = UIImage(named: "logo")

let container = UIView(frame: CGRect(x: 0, y: 0, width: 182, height: 132))
container.backgroundColor = UIColor.clear

let imageView = UIImageView(frame:  CGRect(x: -132, y: 2, width: 182, height: 132))
imageView.contentMode = .scaleAspectFit
imageView.image = logo

container.addSubview(imageView)

self.navigationItem.titleView = container

Как я уже сказал, это хакерский и, конечно, не предназначен Apple. Это решение может не работать в будущих версиях iOS.

Вы также можете установить width а также height из container в 0 и экспериментируйте оттуда. Все дело в ручном поиске правильных значений кадра методом проб и ошибок.

Я пытаюсь заменить "Все входящие" изображением

Ну, ты не можешь. Большой заголовок - это заголовок; это текст. Это не может быть изображение. Представление заголовка может быть изображением, но оно идет в центре панели навигации. Снимок экрана, который вы показали, правильный; Вот как это должно выглядеть. Конец. Прекратите пытаться неправильно использовать рамки.

Другие вопросы по тегам