【问题标题】:setBackgroundImage:forToolbarPosition:barMetrics: call not from AppDelegatesetBackgroundImage:forToolbarPosition:barMetrics: 不是从 AppDelegate 调用
【发布时间】:2012-12-04 11:36:02
【问题描述】:

我有奇怪的错误(?)

如果我从 UIApplicationDelegate application:didFinishLaunchingWithOptions: 调用 setBackgroundImage:forToolbarPosition:barMetrics: ,它可以正常工作并且工具栏背景会更改为我的图像。

如果我尝试将此调用设置到另一个位置,例如 viewDidLoad,它不起作用。

代码很简单, 此代码有效:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"bg"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
    return YES;
}

但事实并非如此:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"bg"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
}

【问题讨论】:

  • 试试这个 [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];在 viewDidLoad
  • Dhara,我想改变工具栏的背景,而不是导航栏
  • 我在 viewDidLoad 中尝试了相同的代码,并且在我的 ios 5 中运行良好。您使用的是哪个 ios?
  • imageNamed:@"bg" 或者应该是@"bg.png" 还是@"bg.jpeg"...

标签: iphone image background toolbar


【解决方案1】:

您必须在项目实例化之前设置外观代理值。如果您的工具栏已经从 XIB 实例化,则 viewDidLoad 可能为时已晚。

【讨论】:

  • 是对的。您遇到了一个问题,即它已经由 XIB 创建并且稍后尝试设置它只是错误的时间。 IB 没有给你一个为那个对象设置 bgImage 的地方吗?
  • AFAIK 外观代理自定义未通过界面生成器公开。
【解决方案2】:

调用该方法后,系统会为应用程序中的所有 UIToolBars 采用新的外观代理,但您需要调用 [navitagtionController.view setNeedsDisplay];所以控制器的层被绘制,特别是如果你在导航控制器的根控制器的 viewDidLoad 中调用它。

请记住,iOS 原生控制器在图层绘制方面非常高效,因此它只会在绘制控制器视图时更新根视图控制器的框架(或实际需要更新的最低限度);如果我没有弄错,即使设置导航控制器的标题也会成功(但按下按钮或更改它们不会产生任何效果,原因与仅更新按钮层相同)。

在这种情况下,在创建代理后调用 [myToolbarInstance setNeedDisplay]。通过这种方式,您可以随时更改任何控制器的外观,甚至可以利用它节省一些重绘调用。

【讨论】:

  • Sergio,谢谢,[self.navigationController.view setNeedsDisplay] 有效
【解决方案3】:

您确定正在调用 viewDidLoad 吗? (例如,它不在 UIView 中,而是在 UIViewController 中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多