У меня есть контроллер представления UITabBarController
корня с тремя контроллерами зрения, один раз из которых является UINavigationController
с UIViewController
, содержащим UISearchDisplayController
и UITableView
. Панель инструментов UINavigationController
не скрыта.UITabBarController с UINavigationController, скрыть панель инструментов UINavigationController на hidesBottomBarWhenPushed, не UITabBarController панель вкладок
Однако, когда я выбираю строку в UITableView
, я хотел бы нажать еще UIViewController
. Когда этот UIViewController
нажат, панель инструментов UINavigationController
должна выдвигаться, а панель вкладок UITabBarController
должна оставаться видимой.
Я попытался установить hidesBottomBarWhenPushed свойства толкаемого UIViewController
истинные (что обеспечивает предполагаемое поведение, когда UINavigationController
не вложен в UITabBarController
). К сожалению, скорее, скользящая панель инструментов UINavigationController
, когда hidesBottomBarWhenPushed установлена в true, UITabBarController
выставляет слайды, оставляя UINavigationController
видимым в нажатом UIViewController
в качестве нижней панели.
Как можно выдвинуть панель инструментов UINavigationController
при нажатии, а не на панели ввода UITabBarController
?
EDIT # 1: Единственное возможное решение, которое я могу думать о том, а не с помощью панели инструментов UINavigationController
, просто добавьте UIToolbar
в нижней части UIViewController
зрения, содержащей UITableView
. Это гарантирует, что UIToolbar
выйдет, когда новый UIViewController
будет нажат и сдвинется, когда появится новый UIViewController
. Единственная проблема заключается в том, что для iPhone и iPod Touch, в отличие от панели инструментов UINavigationController
, высота экземпляра UIToolbar
(44 пикселя) не будет уменьшаться до высоты 30 пикселей (например, панель инструментов UINavigationController
), когда устройство повернуто на ландшафтная ориентация. Если это единственное законное решение, как я могу изменить высоту UIToolbar
в соответствии с высотой панели инструментов UINavigationController
?
РЕДАКТИРОВАТЬ # 2: Что касается EDIT # 1, я полагаю, что рама UIToolbar
может быть изменен в методе willRotateToInterfaceOrientation
. Я все равно хотел бы найти решение для разворачивания панели инструментов UINavigationController
. Лучше, чем создание отдельного UIToolbar
за каждые UIViewController
Желаю иметь нижнюю панель инструментов.
EDIT # 3: В принципе, вот что у меня есть (это результат hidesBottomBarWhenPushed): http://flic.kr/p/bcjydn
И вот что я хотел бы достичь: http://flic.kr/p/bcjybK
EDIT # 4: Во-первых, спасибо за ваше время. Во-вторых, к сожалению, метод setToolbarHidden: анимированный: в UINavigationController не может создать анимацию слайдов/слайдов, как показано в файле setHidesBottomBarWhenPushed: (см. Ссылки в EDIT # 3, в частности вторую ссылку, для нужной анимации) ,Например, предположим, что мы пишем:
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:NO];
[super viewWillAppear:animated];
}
в контроллере родительского вида (контроллер вид, в котором панель не скрыта), и предположим, что мы пишем:
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:YES animated:NO];
[super viewWillAppear:animated];
}
в контроллере представления ребенка (контроллер вида, в котором панель инструментов скрыта).
Как только мы нажмем контроллер дочернего представления на стек UINavigationController из родительского контроллера представления, будет вызван метод view viewWillAppear: Это просто скроет панель инструментов UINavigationController (до начала анимации push), обнажая часть UIWindow, которая находится под панелью инструментов UINavigationController. Остальная часть анимации push выполняется так, как ожидалось (панель инструментов UINavigationController все еще не видна в контроллере дочернего представления, все соответствующим образом изменяются). Затем, когда мы выберем контроллер дочернего представления, метод viewWillAppear: будет вызываться для parentViewController, который отобразит панель инструментов UINavigationController (сделав панель инструментов видимой в контроллере дочернего представления), тогда будет выполняться поп-анимация. Остальная часть поп-анимации выполняется, как ожидалось (панель инструментов UINavigationController все еще видна в контроллере родительского представления, все соответствующим образом изменено).
Вид фигурировал, что этот вопрос должен был сбить ратушу. Единственные оставшиеся идеи у меня есть следующие:
1) EDIT # 1 (хотя, что реализация ограничена невозможностью надлежащим образом или юридически изменить высоту стандартного экземпляра UIToolbar IPod Touch или iPhone находится в ландшафте; один причина, почему я чертовски использую панель инструментов UINavigationController).
2) Любой подкласс UITabBar или UITabBarController пытается предотвратить метод setHidesBottomBarWhenPushed: понять, что панель вкладок UITabBarController является нижней панелью. В принципе, обходите панель вкладок и переходите к панели инструментов UINavigationController. Вероятно, это самая многообещающая идея, но, возможно, самая сложная задача (поскольку знание setHidesBottomBarWhenPushed: innards ограничено, и поскольку для этого могут потребоваться частные API).
, что вы хотите, чтобы скрыть или показать, что вы в следующем экране? если возможно показать код – Hiren
Я добавил EDIT # 3 на мое сообщение. Это даст вам представление о том, что у меня есть прямо сейчас (используя настройку hidesBottomBarWhenPushed для YES для UIViewController, с которой я сверляю). И это даст вам представление о том, чего я хотел бы достичь. Я начинаю думать, что EDIT # 1 может быть самым простым решением. Но это тоже самое простое решение. Не говоря уже о том, чтобы изменить высоту экземпляра UIToolbar (например, панель инструментов UINavigationController), вам нужно установить autoResizingMask или фрейм для панели инструментов, обе из которых, по-видимому, не предлагаются HIG. –