Jak umieścić obraz w centrum paska nawigacyjnego UIViewController?
Mam ten fragment kodu używany w viewDidLoad UIViewController. Nie popełniłem błędów. Obrazy istnieją. Dostaję tło, ale nie Obraz. Obraz jest rodzajem logo.
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
/* Background of navigationBar. */
UIImage * navigationBarImage = [UIImage imageNamed:@"01_navbar_portrait.png"];
[self.navigationController.navigationBar setBackgroundImage:navigationBarImage forBarMetrics:UIBarMetricsDefault];
/* Image in navigationBar */
UIImage * logoInNavigationBar = [UIImage imageNamed:@"01_logo.png"];
UIImageView * logoView = [[UIImageView alloc] init];
[logoView setImage:logoInNavigationBar];
self.navigationController.navigationItem.titleView = logoView;
}
6 answers
UINavigationController
zarządza paskiem nawigacyjnym, patrząc na Właściwość navigationItem
kontrolera widoku najwyższego poziomu na stosie nawigacji. Aby zmienić widok na logo, musisz skonfigurować go w kontrolerze widoku, który używa logo (np. kontrolerze widoku głównego lub innym, który zostanie wciśnięty na stos).
Zrób coś takiego w viewDidLoad
kontrolera widoku:
UIImage* logoImage = [UIImage imageNamed:@"logo.png"];
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logoImage];
W Twoim przypadku ustawiasz niewłaściwy element nawigacyjny:
// Oops...
self.navigationController.navigationItem.titleView = logoView;
// Should be this:
self.navigationItem.titleView = logoView;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 11:21:40
Najpierw musimy utworzyć widok, który ma rozmiar taki sam jak pasek nawigacji następnie dodaj widok obrazu i ustaw ustaw jego ramkę tak, jak wygląda na środek w nawigacji bar.It działa dla wszystkich wersji ios i automatycznie pobiera rozmiar klatki zgodnie z urządzeniem (siatkówka lub normalny) i działa jak magia.
UIView *headerView = [[UIView alloc] init];
headerView.frame = CGRectMake(0, 0, 320, 44);
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Header.png"]];
imgView.frame = CGRectMake(75, 0, 150, 44);
imgView.contentMode = UIViewContentModeScaleAspectFit;
[headerView addSubview:imgView];
navigationCtrl.navigationBar.topItem.titleView = headerView;
[headerView release];
[imgView release];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-15 05:39:56
Swift:
var logoImage:UIImage = UIImage(named: "logo_text")!
self.navigationItem.titleView = UIImageView(image: logoImage)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-10 10:26:13
extension UINavigationController {
func addLogoImage(image: UIImage, navItem: UINavigationItem) {
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false
let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 44))
view.addSubview(imageView)
navItem.titleView = view
imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
imageView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
view.heightAnchor.constraint(equalTo: navigationBar.heightAnchor).isActive = true
view.centerXAnchor.constraint(equalTo: navigationBar.centerXAnchor).isActive = true
view.centerYAnchor.constraint(equalTo: navigationBar.centerYAnchor).isActive = true
}
}
Oto, czego używam.
Oczywiście możesz potrzebować nieco więcej ograniczeń, aby nie kolidować z prawym I lewym przyciskiem paska.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 14:35:28
Być może nie to miałeś na myśli, ale wpadłem na tę stronę, szukając sposobu na wyśrodkowanie obrazka tła dla paska nawigacyjnego, więc na wypadek, gdybyś tu był... jest jeden sposób.
Kradnąc trochę z innej odpowiedzi , możesz rozbić obraz na pierwszy plan i tło, a następnie zbudować nowy obraz, który rozciąga tło i wyśrodkuje pierwszy plan, a następnie ustawić go jako obraz tła paska nawigacyjnego. Budowanie wizerunku działa jak więc:
// build an image by stretching the bg, then merging it with the fg
CGSize barSize = self.navController.navigationBar.frame.size;
UIImage *fg = [UIImage imageNamed:@"some_fg"];
UIImage *bg = [[UIImage imageNamed:@"some_bg"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0.f,1.f,0.f,1.f)];
UIGraphicsBeginImageContextWithOptions(barSize, NO, 0.0);
[bg drawInRect:CGRectMake(0, 0, barSize.width, barSize.height)];
[fg drawInRect:CGRectMake((barSize.width-fg.size.width)/2.f,
0,
fg.size.width,
fg.size.height)];
// grab the merged images
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:02
Wystarczy podać ramkę przez
logoView.frame = CGRectMake(initialize frame here);
Następnie użyj następującego
[self.navigationItem setTitleView:logoView];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 11:15:39