NavigationItem Titleview以IOS 7下的导航栏为中心 - 不可能?

时间:2013-12-11 08:54:46

标签: iphone ios7 uinavigationitem titleview

我问,因为通常的答案,修改viewDidLayoutSubviews中的框架,不起作用 - 除非你在我的代码中发现错误。框架被设置为正确的宽度和高度,但iOS 7不尊重框架。

目前,很久以前发布的应用程序看起来像这样,适用于iOS 6和7: https://itunes.apple.com/se/app/eksjo/id435475192?mt=8

重新编译给出了这个: https://www.dropbox.com/s/pzyv2vhtlmlxkoe/Photo%202013-12-11%2009%2047%2030.png

-(void)viewWillAppear:(BOOL)animated {
    UIImageView *iv=[[UIImageView alloc] initWithFrame:r(320-102/2,0,102,44)];
    iv.image=[UIImage imageNamed:@"Eksjologo5bar.png"];
    self.navigationItem.titleView=iv;
    [iv release];
}

-(void)viewDidLayoutSubviews {
    CGRect frame=self.navigationItem.titleView.frame;
    frame.size.width=102;
    frame.size.height=44;
    self.navigationItem.titleView.frame=frame;
}

我想要做的就是在导航栏的中心放置一个徽标图像。我正在寻找viewWillAppear代码的最小代码更改来执行此操作并仍然与iOS 6.x兼容。

编辑:它也可能是iOS 6问题,而不是iOS 7问题。如果您可以解释为什么应该像这个问题那样解答,那就是我的问题的答案:My UINavigationitem's TitleView getting expanded in ios 6

1 个答案:

答案 0 :(得分:12)

这是我做的事情

 UIImageView *logoImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, desired_image_width, desired_image_height)];
 // if you need to resize the image to fit the UIImageView frame
 logoImage.contentMode = UIViewContentModeScaleAspectFit;
 // no extension name needed for image_name
 [logoImage setImage:[UIImage imageNamed:@"image_name"]];
 UIView *logoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, logoImage.frame.size.width, logoImage.frame.size.height)];
 [logoView addSubview:logoImage];
 self.navigationItem.titleView = logoView;

您可能会注意到我在设置navigationItem的titleView之前将UIImageView实例添加到UIView实例。您可以直接将UIImageView实例设置为navigationItem的titleView,但是当您导航到下一页并且仍希望使用后退按钮显示徽标时,徽标将偏离中心。导航栏会自动将UIView放在中心,但UIImageView(虽然UIImageView是UIView的子类,我只是不知道为什么)。