Как изменить размер UITableView в UINavigationController в UITabBarViewController? - PullRequest
0 голосов
/ 03 февраля 2011

Итак, в моем приложении есть UITabBarController. В рамках этого одной из вкладок является UIViewController, содержащий UINavigationController. Внутри этого есть 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];

Бортовой журналViewController (подкласс 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];*/
    }       
}

Я пробовал что-то вроде listController.view.frame = CGRectMake (что угодно) в RegistryViewcontroller или self.tableView.frame - CGRectMake (что угодно) в WorkoutListTableViewController, но ничего не помогло. Есть идеи? Я могу опубликовать больше кода, если это поможет.

1 Ответ

0 голосов
/ 03 февраля 2011

Вы должны добавить контроллер навигации непосредственно в 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];

Вам не нужен контроллер представления на 1-й вкладке, чтобы добавить UINavigationController в представление,просто добавьте TableViewController в качестве корня контроллера nav и добавьте контроллер nav на 1-ю вкладку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...