Ответ 1
Попробуйте переопределить layoutSubviews
: вызвать [super layoutSubviews]
внутри и затем переместить элементы.
Я создал свой собственный подкласс 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) помещаются в нижней части панели навигации.
Я хотел бы, чтобы они были привязаны к верхней части бара (с некоторым дополнением, конечно). Что мне нужно переопределить для достижения этого?
Спасибо!
EDIT:
Это решение, которое я использовал:
-(void) layoutSubviews
{
[super layoutSubviews];
for (UIView *view in self.subviews)
{
CGRect frame = view.frame;
frame.origin.y = 5;
view.frame = frame;
}
}
Есть ли трюк в состоянии ожидания, все еще есть странное поведение при нажатии и поп-позициях.
Попробуйте переопределить layoutSubviews
: вызвать [super layoutSubviews]
внутри и затем переместить элементы.
Чтобы решить проблему push/pop, используйте setTitleVerticalPositionAdjustment в размере sizeThatFits: (CGSize)
- (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;
}