为什么我的TabBar按钮在iPad上不能自动调整大小?

3
我正在开发一个通用的iOS应用程序,iPad版本使用SplitViewController。 在弹出窗口视图中,我有一个带有两个按钮的UITabBarController。 当在iPhone上运行时,标签栏按钮会正确地拉伸以填满整个视图的宽度...但是在iPad上,在弹出窗口视图中,按钮不能拉伸以填满整个宽度。 我正在通过编程方式创建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];

我也尝试在InspectionTabBarViewController的loadView方法中使用以下语句设置autoResizeMask...
self.tabBar.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;

...但那也没用。我该如何让UITabBar按钮填满整个视图的宽度?

非常感谢您的帮助!


1
我们无法动态设置UITabbarItem的大小。 - Mrunal
如果有任何答案对您有所帮助,请将其标记为已接受。 - Mrunal
4个回答

11

UITabBaritemPositioning属性更改为UITabBarItemPositioningFill

self.tabBar.itemPositioning = UITabBarItemPositioningFill;

Swift版本:

tabBar.itemPositioning = .fill

UITabBar itemPositioning参考文献


4

可以通过在选项卡栏上设置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;
}

使用resizableImageWithCapInsets怎么样?我认为这可以创建一个自动拉伸的图像。 - Aardvark

1
  1. 我们无法动态设置UITabbarItem的大小。
  2. 在iPhone上,它设置为(设备宽度/选项卡数量)
  3. 在iPad上,它设置为特定宽度

如果您想创建这种类型的视图,则可以使用自定义按钮,这些按钮看起来像选项卡栏按钮,并通过您的代码添加功能。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接