我想让导航视图的顶部变小一些。你会如何实现这一目标?这是我到目前为止所尝试的,但正如你所看到的,即使我使导航栏变小,它曾经占据的区域仍然存在(黑色)。
[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];
答案 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的新手。我通过以下方式解决了这个问题:
我创建了一个继承自UINavigationBar的新类
我重写了以下方法:
(void)setBounds:(CGRect)bounds {
[super setBounds:bounds];
self.frame = CGRectMake(0, 0, 320, 54);
}
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)];
}