iPhone:UINavigationBar带有按钮-调整高度

7

我正在开发一款iPhone应用程序,可以在纵向和横向两种方向下使用。

我在一个视图中使用了一个表格视图,并将其嵌入到UINavigationController中。这个导航栏的高度和按钮的大小分别为:纵向44像素或横向34像素。

在另一个视图中,我自己创建了UINavigationBar,并能够设置正确大小的框架,但是嵌入的UINavigationItem与UIBarButtonItem不会缩小。因此,在横向模式下,34像素的按钮太大了,会与导航栏的高度重叠。

有趣的是,尽管其他应用程序中使用了相同的代码,但在这里却无法正常工作...我不知道为什么。

是否有任何方法可以调整UIBarButtonItem的高度/位置?

以下是代码片段:

    navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)];
[navBar setBarStyle: UIBarStyleBlackOpaque];

[self addSubview: navBar];

barButton = [[UIBarButtonItem alloc] initWithTitle: NSLocalizedString(@"flip", @"flip") style:UIBarButtonItemStylePlain target:self action:@selector(flip)];

item = [[UINavigationItem alloc] initWithTitle: NSLocalizedString(@"Translation", @"Translation Tab Bar Title")];
[item setRightBarButtonItem: barButton];
[navBar pushNavigationItem:item animated:NO];   

alt text http://labs.kiesl.eu/images/navbar.png

谢谢

汤姆

3个回答

7
我弄清楚了:导航栏的高度必须是32像素!如果是33或34像素,对齐就会出问题。

非常有帮助,谢谢。32px 是关键。我之前用的是34px,但不起作用。 - lambmj

4

以下是我根据crashtesttommy的答案编写的代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

- (void) correctNavBarHeightForOrientation:(UIInterfaceOrientation)orientation {
    // This is only needed in on the iPhone, since this is a universal app, check that first.
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){
        if (UIInterfaceOrientationIsLandscape(orientation)) {
            self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 32.0f);
        } else {
            self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 44.0f);
        }
    }  
}

- (void) viewWillAppear:(BOOL)animated {
    [self correctNavBarHeightForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self correctNavBarHeightForOrientation:toInterfaceOrientation];
}

0
创建备用图像,并在处理旋转动画的视图控制器方法中更改栏按钮项中的图像。或者您可以在项目中使用UIImageView作为自定义视图,并将其内容模式设置为缩小图像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接