在 UITabBar 背景中设置渐变

Posted

技术标签:

【中文标题】在 UITabBar 背景中设置渐变【英文标题】:setting gradient in a UITabBar background 【发布时间】:2011-09-05 06:39:45 【问题描述】:

什么是我可以实现这样的最简单的方法:

是通过继承 UITabBarController 吗?如果是,需要更改什么属性?

【问题讨论】:

这取决于你想在哪里展示这个......请发布更多详细信息。 来自 UITabBarController 类参考:“此类不用于子类化。”如果你这样做,你可能会遇到应用程序获得批准的问题。 【参考方案1】:
@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end

@implementation CustomizeUITabBarController


- (void)viewDidLoad 
    [super viewDidLoad];

    CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    [v setBackgroundColor:kMainColor];
    [v setAlpha:0.5];
    [[self tabBar] addSubview:v];
    [v release];


@end

希望对你有所帮助....

【讨论】:

【参考方案2】:

是的,继承 UITabbarController 是正确的方法。

覆盖drawRect方法:

- (void)drawRect:(CGRect)rect 
    [[UIImage imageNamed:@"yourNavigationBar.png"] drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) ];

并将带有渐变的图像添加到您的项目中。

【讨论】:

【参考方案3】:

这是一个老问题,但在搜索 TabBar 渐变时首先出现。一个更简单的方法是使用外观。只需将其放入您的 applicationDidFinishLaunching 方法中即可。

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBarImage_1x49"]];

另外,如果您更喜欢在代码中创建渐变图像,您可以这样做:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(0, 0, 1, 49);
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor.darkGrayColor] CGColor], (id)[UIColor.blackColor] CGColor], nil];
UIGraphicsBeginImageContext(gradient.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[gradient renderInContext:context];
UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【讨论】:

【参考方案4】:

我的应用遇到了同样的问题,我想出了以下问题: 在 applicationDidFinishLaunching 方法中,我创建了一个函数来绘制渐变,并使用我的 UITabBarController 的一个实例来根据设备的宽度设置正确的渐变框架。

- (UIImage *)drawGradientInView:(UITabBarController *) tabBarVC 
    CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(CGRectGetMinX(tabBarVC.tabBar.frame), CGRectGetMinY(tabBarVC.tabBar.frame), CGRectGetWidth(tabBarVC.view.frame), CGRectGetHeight(tabBarVC.tabBar.frame));

    //set up your gradient
    //......

    UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return gradientImage;

获取UITabBarController的实例

UITabBarController *tabVC = (UITabBarController *)[UIApplication sharedApplication].windows.firstObject.rootViewController;

设置渐变

[UITabBar appearance].backgroundImage = [self drawGradientInView:tabVC];

我不确定这是否是正确的方法,但它确实对我有用。

【讨论】:

以上是关于在 UITabBar 背景中设置渐变的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中设置 UITableView 部分标题渐变(和透明)背景?

UITabbar 背景图像重复出现

html中想要将背景颜色渐变怎么弄?

如何在 iOS 9.0 中设置 UITabBar 未选中的 ItemTintColor

无法在 iOS 13 中设置 UITabBar shadowimage

在导航控制器内的 UIViewController 中设置背景