我创建了自己的UINavigationBar子类,以启用高于44pxs的自定义背景。
我是通过覆盖这两种方法来实现的:
-(void) drawRect:(CGRect)rect
{
[self.backgroundImage drawInRect:CGRectMake(0, 0, self.backgroundImage.size.width, self.backgroundImage.size.height)];
}
- (CGSize)sizeThatFits:(CGSize)size
{
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize newSize = CGSizeMake(frame.size.width , self.backgroundImage.size.height);
return newSize;
}
这就是结果:
现在,我可以看到的问题是所有UIBarButtonItem(和titleView)都放在导航栏的底部。
我希望它们固定在栏的顶部(当然有一些填充)。 为了达到这个目的,我需要覆盖什么?
谢谢!
修改
这是我使用的解决方案:
-(void) layoutSubviews
{
[super layoutSubviews];
for (UIView *view in self.subviews)
{
CGRect frame = view.frame;
frame.origin.y = 5;
view.frame = frame;
}
}
对于空闲状态的技巧,在推送和弹出项目上仍有一些奇怪的行为。
答案 0 :(得分:6)
尝试覆盖layoutSubviews
:在里面调用[super layoutSubviews]
,然后重新定位项目。
答案 1 :(得分:5)
要解决推/弹问题,请使用sizeThatFits:(CGSize)大小的setTitleVerticalPositionAdjustment
- (CGSize)sizeThatFits:(CGSize)size {
UIImage *img = [UIImage imageNamed:@"navigation_background.png"];
[self setTitleVerticalPositionAdjustment:-7 forBarMetrics:UIBarMetricsDefault];
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize newSize = CGSizeMake(frame.size.width , img.size.height);
return newSize;
}