Контроль размера/положения UINavigationItem titleView

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

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];

И кажется, что изображение произвольно изменяется и позиционируется на основе элементов, включенных в каждый navigationBar (т.е. кнопка "Назад", правая кнопка и т.д.).

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

Ответ 1

Вместо того, чтобы использовать изображение в качестве заголовка, создайте другое представление, содержащее изображение. Установите это представление в качестве заголовка элемента навигации; теперь вы можете настроить рамку просмотра изображений в виде заголовка.

Ответ 2

Вы можете контролировать размер и положение заголовка UINavigationbar. Не устанавливайте изображение в виде заголовка напрямую. Вместо этого создайте пользовательский UIView, а затем установите его фрейм в соответствии с вашим требованием и добавьте свой заголовокImageView в качестве подзаголовка.

UIView *backView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];// Here you can set View width and height as per your requirement for displaying titleImageView position in navigationbar 
[backView setBackgroundColor:[UIColor greenColor]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.frame = CGRectMake(45, 5,titleImageView.frame.size.width , titleImageView.frame.size.height); // Here I am passing origin as (45,5) but can pass them as your requirement. 
[backView addSubview:titleImageView];
//titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = backView;

Надеюсь, это поможет вам.

Ответ 3

В Swift вы можете сделать это следующим образом:

    var titleView = UIView(frame: CGRectMake(0, 0, 100, 40))
    var titleImageView = UIImageView(image: UIImage(named: "cocolife"))
    titleImageView.frame = CGRectMake(0, 0, titleView.frame.width, titleView.frame.height)
    titleView.addSubview(titleImageView)
    navigationItem.titleView = titleView