pep*_*ppy 16 iphone iphone-sdk-3.0 uisearchdisplaycontroller
我有UISearchDisplayController
一个设置UITableViewController
其嵌套在一个UINavigationController
.当选择单元格时,UITableView's
didSelectRowAtIndexPath
触发方法,将新视图推送到父导航控制器.此新视图应在导入栏中隐藏导航栏.
[[self navigationController] setNavigationBarHidden:YES animated:NO];
Run Code Online (Sandbox Code Playgroud)
我在didSelectRowAtIndexPath
方法中使用此行来隐藏导航栏.如果选择的行不使用搜索控制器,但在选择搜索结果时被覆盖,则此方法可以正常工作.似乎在UISearchDisplayController
选择行之后的某个时候取消隐藏navigationBar是正确的.
如果我将setNavigationBarHidden
调用移动到目标视图的viewWillAppear
方法中,结果是类似的.我可以通过将隐藏调用置于其中来使其工作viewDidAppear
,但这会产生一种非常尴尬的过渡效果,这种效果会让人觉得有些不合时宜.我想在新视图滑到屏幕之前使navigationBar已经隐藏.
有谁知道导航栏的取消隐藏在哪里,和/或我可以覆盖此行为的任何方式?
这可能不是最优雅的解决方案,但我相信它完全符合您的要求.我遇到了类似的问题,我的解决方案是使用隐藏导航栏的方法,该方法在延迟0秒后调用,如下所示.
调用的方法是:
-(void) hideNavBar {
if (self.navigationController.navigationBar.hidden == NO)
{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad方法中,我有以下内容:
[self performSelector:@selector(hideNavBar) withObject:nil afterDelay:0.0];
Run Code Online (Sandbox Code Playgroud)
这可以在一瞬间移除并移除导航栏.如果您想要动画,可以修改延迟时间,或者在延迟后删除它.我试过[self hideNavBar],但这根本不起作用,所以坚持我上面的内容.
希望这会有所帮助,如果有人有更优雅的解决方案,我很感兴趣!
小智 1
遇到了同样的问题,设法通过这个丑陋的黑客让它顺利工作:
- (void) viewWillDisappear: (BOOL) animated
{
if (searchController_.active)
{
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
self.navigationController.navigationBar.tintColor = nil;
}
[super viewWillDisappear: animated];
}
- (void) viewWillAppear: (BOOL) animated
{
if (searchController_.active)
{
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
}
[super viewWillAppear: animated];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7885 次 |
最近记录: |