Я добавил несколько компонентов в панель навигации в приложении, которое я создаю. Высота полосы изменяется динамически, как в Safari для iPhone, когда вы нажимаете на поле URL. У меня все взаимодействия и изменения размера работают отлично, кроме случаев, когда я перехожу на другую вкладку и возвращаюсь.
Если я запускаю приложение, нажмите на вторую вкладку, чтобы панель навигации отображалась правильно.
Если я сразу же щелкну первую вкладку, а затем снова вернусь ко второй вкладке, панель навигации будет обрезана.
Я настраиваю навигационную панель в моем методе viewWillAppear
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (navBar == nil) {
CGFloat width = self.view.frame.size.width;
navBar = [self.navigationController.navigationBar autorelease];
navBar.frame = CGRectMake(0,20,width,52);
//This doesn't appear to have any effect- was set to
//UIViewAutoresizingFlexibleWidth and worked but with with the same issue.
navBar.autoresizingMask = UIViewAutoresizingFlexibleHeight;
self.navigationItem.title = nil;
label = [[UILabel alloc] initWithFrame:
CGRectMake(10,2,width-20,14)];
label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
label.text = @"My Custom NavBar";
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:12];
label.textAlignment = UITextAlignmentCenter;
[navBar addSubview:label];
urlTextField = [[UITextField alloc] initWithFrame:
CGRectMake(10,19,width-75,26)];
urlTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
[urlTextField addTarget:(id)self action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
bookmarkButton = [UIButton buttonWithType:UIButtonTypeCustom];
bookmarkButton.frame = CGRectMake(0,0,21,21);
[bookmarkButton setImage:[UIImage imageNamed:@"bookmark.png"] forState:UIControlStateNormal];
[bookmarkButton addTarget:self action:@selector(bookmarkPressed:) forControlEvents:UIControlEventTouchUpInside];
urlTextField.leftView = bookmarkButton;
urlTextField.leftViewMode = UITextFieldViewModeAlways;
actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
actionButton.frame = CGRectMake(0,0,21,21);
[actionButton setImage:[UIImage imageNamed:@"refresh.png"] forState:UIControlStateNormal];
[actionButton addTarget:self action:@selector(actionPressed:) forControlEvents:UIControlEventTouchUpInside];
urlTextField.rightView = actionButton;
urlTextField.rightViewMode = UITextFieldViewModeAlways;
urlTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
urlTextField.borderStyle = UITextBorderStyleRoundedRect;
urlTextField.font = [UIFont systemFontOfSize:17];
urlTextField.delegate = self;
[navBar addSubview:urlTextField];
} else {
//XXX This does make the navBar display correctly
//but I don't really want the keyboard visible when returning from another tab
//[urlTextField becomeFirstResponder];
}
}
Обратите внимание на последний комментарий в приведенном выше коде. Если я заставлю клавиатуру отобразиться, или если пользователь нажмет на UITextField, то там будет отображаться навигационная панель.
Я много чего перепробовал - проверял размеры фреймов вида (вид 2 на изображениях), NavBar, но безуспешно. Кто-нибудь знает, в чем может быть проблема? Я буду рад дать дополнительную информацию.
Спасибо.