Почему мои кнопки TabBar не меняются автоматически на iPad? - PullRequest
3 голосов
/ 09 марта 2012

Я создаю универсальное приложение для iOS, а в версии для iPad используется SplitViewController.В представлении popover у меня есть UITabBarController с двумя кнопками.Когда он работает на iPhone, кнопки TabBar правильно растягиваются, чтобы заполнить всю ширину вида ...

enter image description here

... но на iPad, в виде всплывающего окнакнопки не растягиваются, чтобы заполнить всю ширину ...

enter image description here

Я создаю UITabBarController программно ...

InspectionTabBarViewController *inspectionTabBarVC;
    InspectionListViewController *inspectionListVC;
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

 if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

        inspectionListVC = [[InspectionListViewController alloc] initWithSunday:NO];
        inspectionListVC.managedObjectContext = self.managedObjectContext;
        UINavigationController *calendarNavVC = [[UINavigationController alloc] initWithRootViewController:inspectionListVC];
        calendarNavVC.title = @"Calendar";

        InspectionMapViewController *mapViewVC = [[InspectionMapViewController alloc] initWithNibName:@"InspectionMapView_iPhone" bundle:nil];
        UINavigationController *mapdNavVC = [[UINavigationController alloc] initWithRootViewController:mapViewVC];
        mapdNavVC.title = @"Map";

        inspectionTabBarVC = [[InspectionTabBarViewController alloc] init];
        [inspectionTabBarVC addChildViewController:calendarNavVC];
        [inspectionTabBarVC addChildViewController:mapdNavVC];
        self.window.rootViewController = inspectionTabBarVC;
    } 
    else 
    {
        inspectionListVC = [[InspectionListViewController alloc] initWithSunday:NO];
        UINavigationController *calendarNavVC = [[UINavigationController alloc] initWithRootViewController:inspectionListVC];
        calendarNavVC.title = @"Calendar";

        InspectionMapViewController *mapViewVC = [[InspectionMapViewController alloc] initWithNibName:@"InspectionMapView_iPad" bundle:nil];
        UINavigationController *mapdNavVC = [[UINavigationController alloc] initWithRootViewController:mapViewVC];
        mapdNavVC.title = @"Map";

        inspectionTabBarVC = [[InspectionTabBarViewController alloc] init];
        [inspectionTabBarVC addChildViewController:calendarNavVC];
        [inspectionTabBarVC addChildViewController:mapdNavVC];

        DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
        UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

        self.splitViewController = [[UISplitViewController alloc] init];
        self.splitViewController.delegate = detailViewController;
        self.splitViewController.viewControllers = [NSArray arrayWithObjects:inspectionTabBarVC, detailNavigationController, nil];

        self.window.rootViewController = self.splitViewController;
        inspectionListVC.detailViewController = detailViewController;
        inspectionListVC.managedObjectContext = self.managedObjectContext;

        detailViewController.detailViewControllerDelegate = inspectionListVC;
    }

    [self.window makeKeyAndVisible];

Iтакже попытался установить autoResizeMask внутри метода loadView InspectionTabBarViewController, используя следующую инструкцию ...

self.tabBar.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;

... но это тоже не сработало.Как я могу получить кнопки UITabBar для заполнения всей ширины вида?

Заранее большое спасибо за вашу помощь!

Ответы [ 4 ]

11 голосов
/ 22 сентября 2015

Изменить UITabBar свойство itemPositioning на UITabBarItemPositioningFill:

self.tabBar.itemPositioning = UITabBarItemPositioningFill;

Swift версия:

tabBar.itemPositioning = .fill

UITabBar itemПозиционная позиция

4 голосов
/ 26 сентября 2012

На самом деле это можно сделать, установив setSelectionIndicatorImage на панели вкладок.Размер кнопок будет изменяться в соответствии с шириной изображения независимо от iPhone или iPad.

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

Решение состоит в том, чтобы создать изображение в коде и рассчитать ширину с помощью ({tab bar width}/{# of tabbaritems}).

Например:

Где вы создаетепанель вкладок:

[[self.tabBarController tabBar] setSelectionIndicatorImage:[self selectionIndicatorImage]];

Метод изображения:

- (UIImage *)selectionIndicatorImage
{
    NSUInteger count    = [[self.tabBarController viewControllers] count];
    CGSize tabBarSize = [[self.tabBarController tabBar] frame].size;
    NSUInteger padding = 2;

    CGSize buttonSize = CGSizeMake( tabBarSize.width / count, tabBarSize.height );

    UIGraphicsBeginImageContext( buttonSize );

    CGContextRef c = UIGraphicsGetCurrentContext();

    [[UIColor colorWithWhite:0.9 alpha:0.1] setFill];

    UIBezierPath *roundedRect = [UIBezierPath bezierPathWithRoundedRect:CGRectMake( padding, padding * 2, buttonSize.width - (padding * 2) , buttonSize.height - ( padding * 2 ) ) cornerRadius:4.0];

    [roundedRect fillWithBlendMode: kCGBlendModeNormal alpha:1.0f];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    CGContextRelease( c );

    return image;
}
1 голос
/ 09 марта 2012
  1. Мы не можем динамически устанавливать размер для UITabbarItem.
  2. В iPhone он устанавливает (Ширина устройства / нет Tabbaritems)
  3. В iPad устанавливается с определенной шириной

Если вы хотите создать такой вид, перейдите к пользовательским кнопкам, которые выглядят как кнопки панели вкладок, и добавьте функциональность вашим кодом для того же.

0 голосов
/ 19 мая 2014

Я нашел itemWidth (свойство UITabBar) в iOS7.

Ссылка UITabBar

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