Ограничение высоты просмотра контроллера uitabbarview ios7 без раскадровки

У меня есть tableviewcontroller и на соответствующем щелчке строк tableviewcontroller я хочу, чтобы показать детали содержимого соответствующих строк.

Представление сведений о строке будет иметь фиксированное содержимое следующим образом:

  1. заголовок
  2. Заголовок ниже заголовка
  3. Изображение относится к названию
  4. Здесь я хочу показать соответствующие представления кнопки вкладки контроллера uitabbar

В вышеприведенных пунктах содержимое из пункта 1-3 будет охватывать половину страницы viewcontroller, которая будет фиксированной, а нижняя половина viewcontroller будет иметь 4-ю точку, т.е. представления соответствующих кнопок панели вкладок, которые будут меняться в соответствии с представлениями, созданными для соответствующих вкладок.,

Я не могу найти какое-либо решение для того, чтобы держать верхнюю половину вида фиксированной. И как сохранить вид панели вкладок, ограниченный нижней половиной экрана.

Я делаю это приложение без использования раскадровки.

Много искал, но не нашел решения.

Пожалуйста, предоставьте пример кода или учебника, если таковые имеются.

Ниже приводится изображение того, что я точно хочу, как я создал то же самое в Android.

извините, нужно размыть содержимое изображения.

На изображении выше показано, что я хочу исправить:

  1. синяя полоса сверху - заголовок, который останется фиксированным.
  2. коричневая полоса под заголовком и беловатое изображение под заголовком также исправлены.
  3. Четыре кнопки под изображением являются кнопками панели вкладок, которые в IOS появятся внизу экрана.
  4. ниже кнопки панели вкладок находится представление, содержащее содержимое 1-й кнопки панели вкладок.

Мой вопрос заключается в том, что я хочу, чтобы первые 2 из указанных выше точек были исправлены, а контроллер вида, содержащий представления для соответствующих кнопок вкладок, должен отображаться на остальной половине экрана с помощью 4 кнопок панели вкладок.

Поэтому, если я нажму на любую из кнопок вкладки, изменится только ее вид, который занят нижней половиной экрана, а верхняя половина останется неподвижной (фиксированной).

Надеюсь, мое объяснение прояснит некоторые сомнения по этому вопросу.

----РЕДАКТИРОВАННОЕ РЕШЕНИЕ, основанное на том, что предложил @Simon McLoughlin, следующий код:

Я реализовал функцию, в которой я написал код для реализации моего сценария.

-(void)loadShowDetailsTabBarController
{
    ConceptViewController *conceptViewController;
    CastViewController *castViewController;
    ShowDetailsFeedbackViewController *showDetailsFeedbackViewController;
    PromosViewController *promoViewController;

    UIImage *conceptBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
    UIImage *conceptBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];


    UIImage *castBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
    UIImage *castBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];

    UIImage *feedbackBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
    UIImage *feedbackBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];

    UIImage *promoBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
    UIImage *promoBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];

    conceptBtn = [conceptBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    conceptBtnSelected = [conceptBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    castBtn = [castBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    castBtnSelected = [castBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    feedbackBtn = [feedbackBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    feedbackBtnSelected = [feedbackBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    promoBtn = [promoBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    promoBtnSelected = [promoBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController_iPad" bundle:nil];

        castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController_iPad" bundle:nil];

        showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController_iPad" bundle:nil];

        promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController_iPad" bundle:nil];
    }
    else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController" bundle:nil];

        castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController" bundle:nil];

        showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController" bundle:nil];

        promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController" bundle:nil];

    }

    conceptViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CONCEPT" image:conceptBtn selectedImage:conceptBtn];

    castViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CAST" image:castBtn selectedImage:castBtnSelected];

    showDetailsFeedbackViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"FEEDBACK" image:feedbackBtn selectedImage:feedbackBtnSelected];

    promoViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"PROMO" image:promoBtn selectedImage:promoBtnSelected];/**/

    UITabBarController *showDetailstabVC = [[UITabBarController alloc] init];

    showDetailstabVC.viewControllers = [NSArray arrayWithObjects:conceptViewController,castViewController,showDetailsFeedbackViewController,promoViewController, nil];

    showDetailstabVC.view.frame = CGRectMake(0, 250, screenSize.width, screenSize.height-250);

    self.view.window.rootViewController = showDetailstabVC;

    [self.view addSubview:showDetailstabVC.view];
}

Пожалуйста, дайте мне знать, если мой код правильный?

Я могу посмотреть, что я хотел.

Но теперь проблема в том, что когда я нажимаю на кнопки панели вкладок, я получаю следующую ошибку:

exc_bad_access (code = exc_i386_gpflt)

Ошибка не отображается на экране отладки. Приложение останавливается на следующей строке в main.m:

return UIApplicationMain (argc, argv, nil, NSStringFromClass ([класс AppDelegate]));

1 ответ

Решение

Итак, получается, что вы пытаетесь достичь это UIViewController разделить по вертикали. Верхняя половина статична, а нижняя содержит UITabbarController это будет отображать UIViewControllers который будет занимать только пространство между UITabbar и статический вид.

Я думал, что это можно сделать с помощью UITabbarController ребенок, но я могу ошибаться. У меня было 3 ребенка UIViewController на экране раньше, просто установив рамку. Вы сказали выше, что это не работает для вас, поэтому я вижу 2 варианта.

  1. Вы создаете все содержимое вкладок, чтобы быть меньше. Так, например, скажем, вид сверху составляет 100 пикселей в высоту. в UIViewController во вкладках, просто установите рамку UITableView (или представление или любой другой контент), чтобы начать с 100px для его Y значение. На мой взгляд, это довольно плохое решение, но для этого потребуется минимум усилий.

  2. Вы создаете "Мастер" UIViewController со статическим сечением вверху и горизонтальной прокруткой UIScrollView с включенной подкачкой. И добавить индивидуальный UIViewController Это как дочерние viewControllers к этому. Не уверен, что вы могли бы создать Tabbar и слушать события и использовать его для программной прокрутки или, если вам нужно будет создать свой собственный UIView это выглядит как Tabbar и поместите кнопки для прокрутки влево / вправо.

Второй метод - довольно распространенная вещь. Я работал над несколькими приложениями, которые сделали это, и видел много постов в Интернете о том, как этого добиться. Примерно так: как поместить viewController в UIScrollView. Это просто требует добавления дочерних viewControllers при увеличении X значения и установка общего размера содержимого scrollViews. Включите разбиение на страницы, отключите вертикальную прокрутку.

Другие вопросы по тегам