IOS: кнопки навигации на панели навигации в пользовательской панели навигации
Я создаю приложение с настраиваемой панелью навигации. После некоторых исследований я решил сделать это, используя категорию на UINavigationBar. Панель навигации должна быть немного больше, чем обычно, для размещения тени. Вот код:
#import "UINavigationBar+CustomWithShadow.h"
@implementation UINavigationBar (CustomWithShadow)
- (void)drawRect:(CGRect)rect {
// Change the tint color in order to change color of buttons
UIColor *color = [UIColor colorWithHue:0.0 saturation:0.0 brightness:0.0 alpha:0.0];
self.tintColor = color;
// Add a custom background image to the navigation bar
UIImage *image = [UIImage imageNamed:@"NavBar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, 60)];
}
- (void)layoutSubviews {
self.frame = CGRectMake(0, 20, self.frame.size.width, 60);
}
@end
Единственная проблема теперь в том, что большая панель навигации означает, что кнопки панели навигации находятся слишком далеко вниз, например:
![enter image description here]()
Кто-нибудь знает, как я могу исправить положение кнопок?
Спасибо за помощь!
Update:
Я добавляю кнопки на панель навигации в методе init контроллера вида, например:
// Create "Add" button for the nav bar
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(createNewEntry:)];
[[self navigationItem] setRightBarButtonItem:addButton];
[addButton release];
Ответы
Ответ 1
Вам нужно добавить leftBarButtonItem и rightBarButtonItem в качестве настраиваемых элементов и беспорядок с фреймами.... например:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0,5,buttonImage.size.width,buttonImage.size.height)];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button addTarget:delegate action:@selector(barButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:titleString forState:UIControlStateNormal];
[button setTitleColor:CUSTOM_BAR_BUTTON_TITLE_COLOR forState:UIControlStateNormal];
[[button titleLabel] setFont:[UIFont boldSystemFontOfSize:14]];
[[button titleLabel] setShadowColor:CUSTOM_BAR_BUTTON_SHADOW_COLOR];
[[button titleLabel] setShadowOffset:CGSizeMake(0,-1)];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
[button release];
[[self navigationItem] setRightBarButtonItem:barButton];
[barButton release];
Ответ 2
Попробуйте добавить кнопки на панель навигации в методе viewDidLoad
контроллера вида.
Ответ 3
Мое решение, не самое лучшее, но оно работает для меня отлично. Моя настраиваемая панель навигации имеет высоту 55 (высота по умолчанию - 44). Я вырезал из своей настраиваемой навигационной панели только 44 высоты и вставлял ее в панель навигации. Затем я вырезал следующую часть моей настраиваемой навигационной панели (тени и т.д.) И вставлял ее в виде изображения под панелью навигации. И это так. Кнопки находятся в правильных местах...