iPhone - 如何设置uinavigationbar高度?

时间:2010-01-25 15:24:54

标签: iphone height uinavigationbar

我想让导航视图的顶部变小一些。你会如何实现这一目标?这是我到目前为止所尝试的,但正如你所看到的,即使我使导航栏变小,它曾经占据的区域仍然存在(黑色)。

[window addSubview:[navigationController view]];
navigationController.view.frame = CGRectMake(0, 100, 320, 280);
navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 20);
navigationController.view.backgroundColor = [UIColor blackColor];
[window makeKeyAndVisible];

alt text

9 个答案:

答案 0 :(得分:79)

使用自定义sizeThatFits创建UINavigationBar类别。

@implementation UINavigationBar (customNav)
  - (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(self.frame.size.width,70);
    return newSize;
  }
@end

答案 1 :(得分:24)

使用此导航栏子类,我已成功在iOS 5.x上为iOS 6.x创建了一个更大的导航栏。这给了我一个更大的导航栏,但没有打破所有的动画。

static CGFloat const CustomNavigationBarHeight = 62;
static CGFloat const NavigationBarHeight = 44;
static CGFloat const CustomNavigationBarHeightDelta = CustomNavigationBarHeight - NavigationBarHeight;

@implementation HINavigationBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
//      UIColor *titleColor = [[HITheme currentTheme] fontColorForLabelForLocation:HIThemeLabelNavigationTitle];
//      UIFont *titleFont = [[HITheme currentTheme] fontForLabelForLocation:HIThemeLabelNavigationTitle];

//      [self setTitleTextAttributes:@{ UITextAttributeFont : titleFont, UITextAttributeTextColor : titleColor }];

        CGAffineTransform translate = CGAffineTransformMakeTranslation(0, -CustomNavigationBarHeightDelta / 2.0);
        self.transform = translate;
        [self resetBackgroundImageFrame];

    }
    return self;
}

- (void)resetBackgroundImageFrame
{
    for (UIView *view in self.subviews) {
        if ([NSStringFromClass([view class]) rangeOfString:@"BarBackground"].length != 0) {
            view.frame = CGRectMake(0, CustomNavigationBarHeightDelta / 2.0, self.bounds.size.width, self.bounds.size.height);
        }
    }
}

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
{
    [super setBackgroundImage:backgroundImage forBarMetrics:barMetrics];
    [self resetBackgroundImageFrame];
}

- (CGSize)sizeThatFits:(CGSize)size
{
    size.width = self.frame.size.width;
    size.height = CustomNavigationBarHeight;
    return size;
}

- (void)setFrame:(CGRect)frame
{
    [super setFrame:frame];
    [self resetBackgroundImageFrame];
}



@end

答案 2 :(得分:7)

快速

创建Uinavigation栏的子类。

import UIKit

class higherNavBar: UINavigationBar {

override func sizeThatFits(size: CGSize) -> CGSize {
    var newSize:CGSize = CGSizeMake(self.frame.size.width, 87)
    return newSize
}

两边都会有两个空白条,我将宽度更改为确切的数字,以使其正常工作。

然而标题和后退按钮与底部对齐。

答案 3 :(得分:6)

没有必要继承UINavigationBar。在Objective-C中你可以使用一个类别,在Swift中你可以使用扩展名。

extension UINavigationBar {
    public override func sizeThatFits(size: CGSize) -> CGSize {
        return CGSize(width: frame.width, height: 70)
    }
}

答案 4 :(得分:4)

我发现以下代码在iPad(和iPhone)上表现更好:

- (CGSize)sizeThatFits:(CGSize)size
{
     return CGSizeMake(self.superview.bounds.size.width, 62.0f);
}

答案 5 :(得分:1)

如果您想为导航栏使用自定义高度,我认为您应该至少使用自定义导航栏(不是导航控制器中的导航栏)。隐藏navController的栏并添加您自己的栏。然后你可以将它的高度设置为你想要的任何东西。

答案 6 :(得分:1)

我能够在Swift中使用以下子类代码。它使用现有高度作为起点并添加到其中。

与此页面上的其他解决方案不同,在横向和纵向方向之间切换时,它似乎仍然可以正确调整大小。

RewriteRule ^([^/]*)?/?([^/]*)?/?([^/]*)?/?([^/]*)?/?([^/]*)?/?([^/]*)?/?([^/]*)?/?(.*)$ $1/index.php?id=$2&pg=$3&sub=$4&aux1=$5&aux2=$6&aux3=$7&aux4=$8

答案 7 :(得分:1)

这里是Swift中一个非常好的子类,您可以在Storyboard中进行配置。它基于mackross所做的工作,这很棒,但它是在iOS7之前,并且会导致导航栏不在状态栏下延伸。

df.grouby("Week")

答案 8 :(得分:0)

我还是ios的新手。我通过以下方式解决了这个问题:

  1. 我创建了一个继承自UINavigationBar的新类

  2. 我重写了以下方法:

     (void)setBounds:(CGRect)bounds {
    
       [super setBounds:bounds];
       self.frame = CGRectMake(0, 0, 320, 54);
    
    
      }
    
  3. 3.要获得导航栏的自定义背景,我重写了以下方法:

    -(void)drawRect:(CGRect)rect {
    
        [super drawRect:rect];
    
        UIImage *img = [UIImage imageNamed:@"header.png"];
    
        [img drawInRect:CGRectMake(0,0, self.frame.size.width, self.frame.size.height)];
    
    
    }
    
    1. 在xib文件中,我已将导航栏的默认UINavigationBar类更改为我的类。