【问题标题】:iOS: Make navigation bar always visible in UITableViewControlleriOS:使导航栏在 UITableViewController 中始终可见
【发布时间】:2014-11-11 00:45:03
【问题描述】:

我已经搜索和搜索,但无法找到我的问题的答案。

我有一个表格视图控制器,我需要导航栏始终在屏幕顶部可见,并且不随表格视图一起向上滚动。我已经看到建议我调整内容插图、将其设置为半透明等的解决方案。这些都不起作用。如果您能提供任何解决方案/建议,我将不胜感激!

-(void)viewDidLoad { [超级viewDidLoad];

self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.translucent=YES;

self.tableView.contentInset = UIEdgeInsetsMake(44,0,0,0);
self.automaticallyAdjustsScrollViewInsets =  NO;

self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;


if ([UIScreen mainScreen].scale > 1.0)
{
    [self->btnBack setImage:[UIImage imageNamed:@"back_button@2x.png"]];
}
else
{
    [self->btnBack setImage:[UIImage imageNamed:@"back_button.png"]];
}

self.tableView.separatorColor = [UIColor colorWithRed:69/255.0 green:189/255.0 blue:150/255.0 alpha:1.0];


[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bar_bg.png"] forBarMetrics:UIBarMetricsDefault];


NSLog(@"Loading up coupons");

MWRAppDelegate* appDelegate = [UIApplication sharedApplication].delegate;

if([g_categoryName isEqualToString: @"All"]){
    NSMutableArray *coupons = [appDelegate getAllCoupons];

    NSMutableArray *contests = [appDelegate getAllContests];

    NSArray *newArray=[contests arrayByAddingObjectsFromArray:coupons];

    self.fetchedRecordsArray = newArray;
}
else {
    NSMutableArray *coupons = [appDelegate getCatCoupons];

    NSMutableArray *contests = [appDelegate getAllContests];

    NSArray *newArray=[contests arrayByAddingObjectsFromArray:coupons];

    self.fetchedRecordsArray = newArray;
}

[self.tableView reloadData];

}

【问题讨论】:

  • 显示你到目前为止所做的代码,以便我们知道哪里出了问题
  • 这两件事似乎是矛盾的,“我需要导航栏始终在屏幕顶部可见,并与表格视图一起向上滚动。”如果它随着表格视图滚动,它并不总是可见的,那么你想要哪个?
  • 对不起,我的意思是“不要随着表格视图向上滚动”

标签: ios uitableview


【解决方案1】:

您可以尝试将 UITableViewController 嵌入 UINavigationControler。

使用 Storyboard :选择您的 UITableViewController,按编辑器 > 嵌入 > 导航控制器。

或者通过代码,创建一个 UINavigationController 并将你的 tableviewcontroller 设置为它的 rootviewcontroller:

UINavigationController* aNavigationController = [[UINavigationController alloc] initWithRootViewController:yourTableViewController];

并呈现一个NavigationController 而不是呈现你的TableViewController ;-)

ps:如果 yourTableViewController 没有嵌入到导航控制器中,那么调用 self.navigationController 将只返回 nil 并且对其进行的任何操作也将是 nil。

【讨论】:

  • 我刚试过你的方法,“使用 Storyboard : 选择你的 UITableViewController,按编辑器 > 嵌入 > 导航控制器”,它没有工作,同样的结果。
  • @JasonHowell,应该可以的。什么是“相同的结果”?你从来没有在你的问题中提到你首先得到了什么结果。
  • @rdelmar 相同的结果是,当您在表格视图上向下滚动时,导航栏会停留在表格视图的顶部,并且随着您在列表中越往下走,最终将不再可见。无论您在表格视图列表中的哪个位置,我都需要该导航栏保持可见。
  • @JasonHowell,我不确定你在做什么,因为将你的表格视图控制器嵌入导航控制器应该使导航栏保持在顶部。
  • @JasonHowell,当你展示你的表格视图控制器时,你是在展示它,还是它嵌入的导航控制器?应该是后者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多