如何在 UITabBarViewController 内的 UINavigationController 内调整 UITableView 的大小?

Posted

技术标签:

【中文标题】如何在 UITabBarViewController 内的 UINavigationController 内调整 UITableView 的大小?【英文标题】:How to resize UITableView within UINavigationController within UITabBarViewController? 【发布时间】:2011-02-02 23:52:24 【问题描述】:

所以我的应用程序有一个 UITabBarController。其中,其中一个选项卡是包含 UINavigationController 的 UIViewController。其中有一个 UITableViewController。

问题是由于某种原因,TableView 的大小关闭了,并且表格底部条目的一部分被 TabBar 遮挡了。我已经尝试了我能想到的一切来调整表格视图的大小,但无济于事。以下是代码的相关部分:

AppDelegate

tabBarController = [[UITabBarController alloc] init];

LogbookViewController *firstVC = [[LogbookViewController alloc] init]; 
PaceCalcViewController *secondVC = [[PaceCalcViewController alloc] init];
SettingsTableViewController *thirdVC = [[SettingsTableViewController alloc] init];

...

// Add them as children of the tab bar controller
tabBarController.viewControllers = [NSArray arrayWithObjects: firstVC, secondVC, thirdVC, nil];

LogbookViewController(UIViewController 的子类)

- (void)viewDidLoad 
    [super viewDidLoad];

    navigationController = [[UINavigationController alloc] init];
    [self.view addSubview:navigationController.view];

    WorkoutListTableViewController *listController = [[WorkoutListTableViewController alloc] init];

    listController.managedObjectContext = self.managedObjectContext;

    [navigationController pushViewController:listController animated:NO];
    [listController release];

WorkoutListTableViewController(UITableViewcontroller 的子类)目前没有任何我认为会影响它的特别内容,但这里是 ViewDidLoad:

- (void)viewDidLoad 
    [super viewDidLoad];

    self.title = @"Workouts";

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"List" style:UIBarButtonItemStyleBordered target:nil action:nil];

    self.navigationItem.backBarButtonItem = backButton; 

    NSString *paths = [[NSBundle mainBundle] resourcePath];
    NSString *fileName = @"short_bg.png";
    NSString *filePath = [paths stringByAppendingPathComponent:fileName];
    UIImage *paper = [[UIImage alloc] initWithContentsOfFile:filePath];
    UIImageView *paper_bg = [[UIImageView alloc] initWithImage:paper];

    self.tableView.backgroundView = paper_bg;

    [fileName release];
    [paper release];

    //self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)];
    self.navigationItem.rightBarButtonItem = addButtonItem;
    [addButtonItem release];

    /*UIBarButtonItem *importButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Import" style:UIBarButtonItemStylePlain target:self action:@selector(importDialogAction:)];
     self.navigationItem.leftBarButtonItem = importButtonItem;
     [importButtonItem release];*/
           

我在 LogbookViewcontroller 中尝试了 listController.view.frame = CGRectMake(whatever) 或 WorkoutListTableViewController 中的 self.tableView.frame - CGRectMake(whatever) 之类的方法,但没有任何效果。有任何想法吗?如果有帮助,我可以发布更多代码。

【问题讨论】:

【参考方案1】:

您应该将导航控制器直接添加到 UITabBarController,然后它的大小应该适当:

tabBarController = [[UITabBarController alloc] init];
WorkoutListTableViewController *listController = [[WorkoutListTableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:listController];

PaceCalcViewController *secondVC = [[PaceCalcViewController alloc] init];
SettingsTableViewController *thirdVC = [[SettingsTableViewController alloc] init];

...

// Add them as children of the tab bar controller
tabBarController.viewControllers = [NSArray arrayWithObjects: navController, secondVC, thirdVC, nil];

您不需要第一个选项卡中的 View Controller 来将 UINavigationController 添加到视图中,只需将 TableViewController 添加为导航控制器的根,并将导航控制器添加到第一个选项卡中。

【讨论】:

一个问题是我希望标签标题和导航栏标题不同。有没有办法单独定义它们?此外,我创建单独的视图控制器的部分原因是因为我有一个模态视图控制器,我希望它出现在表格上方,但在选项卡栏下方,以便在模态视图出现时选项卡栏保持可见。如果没有额外的子视图,还有其他方法可以做到这一点吗?

以上是关于如何在 UITabBarViewController 内的 UINavigationController 内调整 UITableView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?