更改iPhone导航栏的高度

时间:2009-05-21 13:22:57

标签: iphone uinavigationbar

我的客户端无法读取iPhone的默认字体,尺寸太小。我有一个带导航栏的应用程序,我需要将其中的所有内容放大,例如,字体的大小。

IB似乎不允许这样......任何帮助?

非常感谢!

6 个答案:

答案 0 :(得分:13)

更新:今天(2012年)有一个更大的倾向于自定义UI,所以我想说下面的答案是太苛刻了。但是,仍然没有支持自定义高度的方法,但是你当然可以从UINavigationBar派生并覆盖一些大小调整方法。这可能会让你被拒绝(尽管它仍然是一个灰色区域,只是苹果今天可能会忽视的东西)。

获得所需大小后,可以使用iOS 5自定义API添加自定义背景图像(请参阅WWDC 2011会话114 - 自定义UIKit控件的外观)。

2009年的原始答案:

  

这通常是不可能的。

     

更重要的是,我认为让导航栏更高是一种违规行为   Apple人机界面指南,您的申请可能是   因此而被App Store拒绝。请确保你的   客户在继续之前了解这一风险。

     

(指出拒绝风险通常是说服的好方法   客户反对做出无意义的决定。)

答案 1 :(得分:11)

这里的许多答案都是不正确或不完整的,所以我想在这里添加我的答案,希望它可以启发一些。

首先,更改导航栏的高度没有任何问题。人们评论说不允许,或违反指导原则只是误解了这些指导原则。

自iOS 5以来,调整或更改UINavigationController中使用的默认导航栏的功能已成为SDK的一部分。

- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass NS_AVAILABLE_IOS(5_0);

更改状态栏高度的最简单方法是在初始化导航控制器时使用此方法,并传入自定义UINavigationBar子类。

TestViewController *t = [[TestViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];
[nav setViewControllers:@[t]];  
[self.window setRootViewController:nav];
[self.window makeKeyAndVisible];

这种自定义UINavigationBar类的示例如下所示:

@interface MyNavigationBar : UINavigationBar
@end

@implementation MyNavigationBar

- (CGSize)sizeThatFits:(CGSize)size
{
        CGSize s = [super sizeThatFits:size];
        s.height = 90; // Or some other height
        return s;
}

@end

答案 2 :(得分:7)

如果您决定只更改导航栏中的字体大小,则可以执行此操作(通常采用UIViewController的{​​{1}}方法):

viewDidLoad

答案 3 :(得分:5)

通过子类化,您可以实现并仍然支持iOS 3 +

完整示例:

#import <UIKit/UIKit.h>

@interface ASNavigationBar : UINavigationBar
@property (nonatomic , retain) UIImage *backgroundImage;
@end

并实施:

#import "ASNavigationBar.h"

@implementation ASNavigationBar
@synthesize backgroundImage = _backgroundImage;

-(void) setBackgroundImage:(UIImage *)backgroundImage
{
    if (_backgroundImage != backgroundImage)
    {
        [_backgroundImage release];
        _backgroundImage = [backgroundImage retain];
        [self setNeedsDisplay];
    }
}

-(void) drawRect:(CGRect)rect
{
    // This is how the custom BG image is actually drawn
    [self.backgroundImage drawInRect:rect];
}

- (CGSize)sizeThatFits:(CGSize)size 
{
    // This is how you set the custom size of your UINavigationBar
    CGRect frame = [UIScreen mainScreen].applicationFrame;
    CGSize newSize = CGSizeMake(frame.size.width , self.backgroundImage.size.height);
    return newSize;
}
@end

重要说明:

  1. 如果背景图片是透明区域,则必须将其barStyle属性设置为“半透明”,否则透明区域将为黑色。
  2. 如果您的NavigationBar高于44磅,则必须考虑到BarButtonItems的位置可能不正确。它们都将固定在酒吧的底部。您可以通过覆盖layoutSubviews并更改其origin.y值来解决此问题。

答案 4 :(得分:1)

您不应更改导航栏的高度。来自View Controller的Apple编程指南:

自定义导航栏外观

在导航界面中,导航控制器拥有其UINavigationBar对象并负责管理它。不允许更改导航栏对象或直接修改其边界,框架或Alpha值。但是,有一些属性可以修改,包括以下内容:

●barStyle属性

●半透明属性

●tintColor属性

(摘自Apple:https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

UPDATE - IOS 7 ---仍然只能更改可用的属性,但下面是关于如何在导航栏中实现灵活性的一个很好的教程http://www.appcoda.com/customize-navigation-status-bar-ios-7/

答案 5 :(得分:0)

添加Skela的答案:

如果您在故事板中启动导航控制器,则可以将故事板中UINavigationBar的类更改为自定义导航栏。

enter image description here

enter image description here

然后在类

中实现更改高度
@interface MyNavigationBar : UINavigationBar
@end

@implementation SwitchAssessmentNavigationBar

- (CGSize)sizeThatFits:(CGSize)size
{
        CGSize s = [super sizeThatFits:size];
        s.height = 200; // Or some other height
        return s;
}

@end