Как использовать изображение в качестве заголовка на большой панели навигации?
Я пытаюсь установить изображение в качестве заголовка на большой панели навигации. Пока что я могу заставить его отображать логотип в центре вверху, как если бы это была стандартная панель навигации.
Я пытаюсь заменить "Все входящие" на изображение.
На данный момент я получаю что-то вроде этого с помощью 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
и экспериментируйте оттуда. Все дело в ручном поиске правильных значений кадра методом проб и ошибок.
Я пытаюсь заменить "Все входящие" изображением
Ну, ты не можешь. Большой заголовок - это заголовок; это текст. Это не может быть изображение. Представление заголовка может быть изображением, но оно идет в центре панели навигации. Снимок экрана, который вы показали, правильный; Вот как это должно выглядеть. Конец. Прекратите пытаться неправильно использовать рамки.