Как добавить изображение в центр навигацииBar в Objective-C?
Я разрабатываю в IOS, я использую следующий код для установки фона в navigationBar
.
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];
И я хочу добавить изображение на navigationBar
и в центр navigationBar
, как показано на следующем рисунке.
![enter image description here]()
Как добавить изображение в центр навигацииBar в Objective-C?
Спасибо заранее.
Ответы
Ответ 1
Настройте вид заголовка навигации, как показано ниже.
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];
EDIT:
если у вас есть большое изображение, используйте ниже код
UIImage *img = [UIImage imageNamed:@"1.png"];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[imgView setImage:img];
// setContent mode aspect fit
[imgView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imgView;
Ответ 2
Как вы сказали, установить значок приложения. Вы можете захотеть пойти на это, чтобы отобразить значок для всего приложения.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
CGSize imageSize = CGSizeMake(40, 40);
CGFloat marginX = (self.navigationController.navigationBar.frame.size.width / 2) - (imageSize.width / 2);
imageView.frame = CGRectMake(marginX, 0, imageSize.width, imageSize.height);
[self.navigationController.navigationBar addSubview:imageView];
Вывод:
![enter image description here]()
Ответ 3
Здесь стоит упомянуть ширину 3 для UIImageView. Это важно - если это 2 (или любое четное число), тогда изображение будет размыто. Установка clipToBounds = NO и contentMode = UIViewContentModeScaleAspectFill означает, что изображение будет отображаться вне ширины просмотра изображения (отлично) и будет правильно распределено.
UIImageView *imageView = [[UIImageView alloc]
initWithFrame:CGRectMake(0,0,3,44)];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = NO;
imageView.image = [UIImage imageNamed:@"navigation-logo"];
controller.navigationItem.titleView = imageView;
Ответ 4
viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
Ответ 5
Я столкнулся с той же проблемой, так как iOS 11 и Xcode 9 начали управлять навигационными барами с автоматической компоновкой вместо фреймов, вы должны знать о макете панели навигации.
В сеансе 204 WWDC, обновив приложение для iOS 11, было указано, что UIToolBar и UINavigationBar были обновлены для использования автоматического макета, а во избежание нулевых пользовательских представлений вам нужно знать несколько вещей об этом.
UINavigation и UIToolBar предоставляют позицию, не заботятся о ней.
Вы должны указать размер пользовательского представления одним из следующих:
- Ограничения для ширины и высоты.
- Реализация intrinsicContentSize
- Подключайте свои просмотры через ограничения.
Отвечая на ваш вопрос, я установил titleView с ImageView, предоставив размер двумя разными способами:
Явное указание высоты и ширины.
-(void)updateNavTitleView{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
[imageView.widthAnchor constraintEqualToConstant:160].active = YES;
[imageView.heightAnchor constraintEqualToConstant:44].active = YES;
self.navigationItem.titleView = imageView;
}
Или установите режим аспект в качестве aspectFit
-(void) updateNavTitleView{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imageView;
}
Если вы хотите посмотреть сеанс, Session 204
Ответ 6
попробуйте следующее:
UIImage *logo = [UIImage imageNamed:@"logo.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage: logo];
imageView.frame = CGRectMake(160, 2, 40, 40);
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo];
Ответ 7
UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;