Итак, это решение меня не очень обрадовало, но на данный момент оно кажется единственным.
Смысл в том, чтобы игнорировать встроенное свойство панели инструментов UINavigationController, создать отдельный UIToolbar и поместить его в свой контроллер представления.
// Create your bar items
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *toolbarItems = [[NSArray alloc] initWithObjects: flexibleSpace, nil];
[flexibleSpace release], flexibleSpace = nil;
UIToolbar *customToolbar = [[UIToolbar alloc] init];
[customToolbar sizeToFit];
[customToolbar setFrame:CGRectMake(0.0, self.view.frame.size.height - self.navigationController.navigationBar.frame.size.height - customToolbar.frame.size.height, customToolbar.frame.size.width, customToolbar.frame.size.height)];
[customToolbar setItems:toolbarItems];
[[self view] addSubview:customToolbar];
[customToolbar release], customToolbar = nil;
[toolbarItems release], toolbarItems = nil;
Таким образом, панель инструментов будет смещаться вместе с ее видом, не вызывая проблем с анимацией, таких как «белые прямоугольники» или поздняя панель инструментов, когда она помещается в viewDidAppear ...