Ограничение высоты просмотра контроллера uitabbarview ios7 без раскадровки
У меня есть tableviewcontroller и на соответствующем щелчке строк tableviewcontroller я хочу, чтобы показать детали содержимого соответствующих строк.
Представление сведений о строке будет иметь фиксированное содержимое следующим образом:
- заголовок
- Заголовок ниже заголовка
- Изображение относится к названию
- Здесь я хочу показать соответствующие представления кнопки вкладки контроллера uitabbar
В вышеприведенных пунктах содержимое из пункта 1-3 будет охватывать половину страницы viewcontroller, которая будет фиксированной, а нижняя половина viewcontroller будет иметь 4-ю точку, т.е. представления соответствующих кнопок панели вкладок, которые будут меняться в соответствии с представлениями, созданными для соответствующих вкладок.,
Я не могу найти какое-либо решение для того, чтобы держать верхнюю половину вида фиксированной. И как сохранить вид панели вкладок, ограниченный нижней половиной экрана.
Я делаю это приложение без использования раскадровки.
Много искал, но не нашел решения.
Пожалуйста, предоставьте пример кода или учебника, если таковые имеются.
Ниже приводится изображение того, что я точно хочу, как я создал то же самое в Android.
извините, нужно размыть содержимое изображения.
На изображении выше показано, что я хочу исправить:
- синяя полоса сверху - заголовок, который останется фиксированным.
- коричневая полоса под заголовком и беловатое изображение под заголовком также исправлены.
- Четыре кнопки под изображением являются кнопками панели вкладок, которые в IOS появятся внизу экрана.
- ниже кнопки панели вкладок находится представление, содержащее содержимое 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 варианта.
Вы создаете все содержимое вкладок, чтобы быть меньше. Так, например, скажем, вид сверху составляет 100 пикселей в высоту. в
UIViewController
во вкладках, просто установите рамкуUITableView
(или представление или любой другой контент), чтобы начать с 100px для егоY
значение. На мой взгляд, это довольно плохое решение, но для этого потребуется минимум усилий.Вы создаете "Мастер"
UIViewController
со статическим сечением вверху и горизонтальной прокруткойUIScrollView
с включенной подкачкой. И добавить индивидуальныйUIViewController
Это как дочерние viewControllers к этому. Не уверен, что вы могли бы создатьTabbar
и слушать события и использовать его для программной прокрутки или, если вам нужно будет создать свой собственныйUIView
это выглядит какTabbar
и поместите кнопки для прокрутки влево / вправо.
Второй метод - довольно распространенная вещь. Я работал над несколькими приложениями, которые сделали это, и видел много постов в Интернете о том, как этого добиться. Примерно так: как поместить viewController в UIScrollView. Это просто требует добавления дочерних viewControllers при увеличении X
значения и установка общего размера содержимого scrollViews. Включите разбиение на страницы, отключите вертикальную прокрутку.