Подтвердить что ты не робот

Как добавить изображение в центр навигацииBar в Objective-C?

Я разрабатываю в IOS, я использую следующий код для установки фона в navigationBar.

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];

И я хочу добавить изображение на navigationBar и в центр navigationBar, как показано на следующем рисунке.

enter image description here

Как добавить изображение в центр навигацииBar в Objective-C?

Спасибо заранее.

4b9b3361

Ответ 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;