Контроль размера/положения 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