【问题标题】:How to change the background color of tab bar programatically?如何以编程方式更改标签栏的背景颜色?
【发布时间】:2017-08-02 08:09:08
【问题描述】:

我的目标很简单,将标签栏的默认背景颜色更改为我自己的颜色。

例如,默认是这样的

我创建了自己的 UITabBarController 子类,因此我不需要更改每个 UIViewController 的颜色

import UIKit

class MyTabController: UITabBarController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.tabBar.backgroundColor = .black
    }
}

结果与我的预期不同。

我以为可能是颜色的问题,后来改成自定义的UIColor,颜色看起来一模一样。

我也尝试更改条形颜色,但它在活动时更改图标的颜色,而不是背景

self.tabBar.tintColor = UIColor(red:1.00, green:0.23, blue:0.19, alpha:1.0)

结果是

我做错了什么?

【问题讨论】:

标签: ios swift uitabbar


【解决方案1】:

您应该使用self.tabBar.barTintColor 或查看UIBarStyleself.tabBar.barStyle 看看是否有效。

【讨论】:

  • barTintColor 只是改变图标的​​颜色而不是背景
  • 现在可以确定的是,您尝试了 barTintColor 而不是 tintColor?
【解决方案2】:

我的应用遇到了同样的问题,但我想在标签栏背景中设置渐变图像,结果如下: 在 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];

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多