UINavigationBar 标题视图对齐问题

Posted

技术标签:

【中文标题】UINavigationBar 标题视图对齐问题【英文标题】:UINavigationBar title view alignment issue 【发布时间】:2014-04-11 07:21:24 【问题描述】:

我已将ImageView 设置为特定ViewController 的标题视图,而其他控制器将UILabel 作为标题视图。我使用以下代码设置标题视图,

UIImageView *imageTitle = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];
[self.navigationController.navigationBar.topItem setTitleView:imageTitle];

我也试过用这个,

UIImageView *imageTitle = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];
[self.navigationItem setTitleView:imageTitle];

问题是,当我回到视图控制器时,标题视图 在左侧停留几秒钟。我不确定这是什么原因?请让我知道我哪里出错了???

P.S:该问题仅出现在 ios 7 中!

这里是这个问题的示例项目 - https://dl.dropboxusercontent.com/u/97646145/Issue/NavigationTitleView.zip

更新

正如@FahimParkar 建议的那样,我为标题视图使用了 320x44 图像。由于图像很宽,定位延迟似乎很小。 这是解决此问题的唯一方法吗?

320x44 图像下载试用项目的链接 -> https://dl.dropboxusercontent.com/u/97646145/Issue/NavigationTitleView_Updated.zip

【问题讨论】:

你能检查一下这个吗:***.com/questions/15199980/… 或 ***.com/questions/17361500/… @DhavalBhadania 没有。一个是关于导航栏的……另一个是关于如何设置标题视图的。我已经设置了标题视图,但是弹出时出现问题! 几秒钟??然后就没事了? [self.navigationItem setTitleView:imageTitle]; 这是正确的实现 @HimanshuJoshi 是的.. 它只发生几秒钟.. 然后就可以了 【参考方案1】:

您有两个正确设置导航的选择。

第一:

像下面这样设置 Titleview:-

- (void)viewDidLoad


    UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
    UIImageView *imgviw=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
    imgviw.backgroundColor = [UIColor blackColor];

    imgviw.center=navView.center; // this is display your image at center of navigation bar.
    imgviw.image=[UIImage imageNamed:@"passowrd.png"];
    [navView addSubview:imgviw];

    self.navigationItem.titleView = navView;
    [super viewDidLoad];

输出如下:-

第二:

将导航图像设置为您对特定view-controller 的要求。为导航栏创建相同大小的导航图像。并使用 Bellow 代码设置。

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Navbar.png"] forBarMetrics:UIBarMetricsDefault];

【讨论】:

【参考方案2】:

在您的 ViewWillAppear 方法中尝试此代码,希望对您有所帮助:

UIImage *image = [UIImage imageNamed: @"Logo"];
UIImageView *imageView = [[UIImageView alloc] initWithImage: image];

self.navigationItem.titleView = imageView;

【讨论】:

【参考方案3】:

autoresizing可能有问题

UIImageView* imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LOGO.png"]];
imgView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
imgView.contentMode=UIViewContentModeScaleAspectFit;
self.navigationItem.titleView = imgView;

【讨论】:

在 titleView 中添加图片的位置?在viewDidLoadviewWiilAppear? 我有一个单独的类来堆叠所有主视图控制器,我在那个类中做这部分..【参考方案4】:

您需要在viewDidLoad 而不是viewWillAppear 中设置导航栏标题视图。

【讨论】:

以上是关于UINavigationBar 标题视图对齐问题的主要内容,如果未能解决你的问题,请参考以下文章

从多个视图向 UINavigationBar 添加和删除 UIBarButtonItems

UINavigationBar titleview 图像未与 UINavigationBar 对齐

如何在中间对齐自定义 UINavigationBar 标题(UILabel)(iOS)

关闭模式视图控制器后如何正确对齐 rightBarButtonItem?

UINavigationBar 自定义标题视图

从 UIPageViewContoller 中包含的视图设置 UINavigationBar 标题