【问题标题】:iOS5 changing Background of UIToolbariOS5改变UIToolbar的背景
【发布时间】:2011-11-29 14:42:43
【问题描述】:

我已阅读“iOS 5 中的新增功能”文档,其中指出,现在可以更好地支持更改某些 UI 元素的背景。

我找不到 iOS 5 更改 UIToolbar 的背景图像的正确方法。是否有一种特殊的新 iOS 5 方法可以做到这一点?或者我还需要继承 UIToolbar 的子类吗?

【问题讨论】:

    标签: ios background-image uitoolbar


    【解决方案1】:

    是的,有一种新方法可以做到这一点。您可以使用appearance 使所有UIToolBar 具有相同的外观。

    首先,您必须确保您的班级遵循UIAppearanceContainer 协议。在这里,我在我的应用程序委托中完成了它:

    @interface AppDelegate : UIResponder <UIApplicationDelegate, UIAppearanceContainer>
    
    @property (strong, nonatomic) UIWindow *window;
    
    @end
    

    然后您可以设置外观,例如application:didFinishLaunchingWithOptions:viewDidLoad。像这样:

    UIImage *image = [UIImage imageNamed:@"myimage.png"];
    [[UIToolbar appearance] setBackgroundImage:image forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
    

    您只需执行一次即可在您的应用中为所有UIToolBars 获得相同的外观。您还可以设置UIToolBar 的许多(如果不是全部?)属性。

    作为旁注,有许多类可以遵循UIAppearanceContainer 协议。要查看使用外观协议可以自定义哪些内容,可以打开要自定义的类的头文件,如果可以设置属性为UIAppearance,则该属性在属性声明后面写有UI_APPEARANCE_SELECTOR

    【讨论】:

    • 在模拟器中启动应用程序后,控制台出现错误:-[_UIAppearance setBackgroundImage:forBarMetrics:]: unrecognized selector sent to instance 0x903b8d0 2011-11-29 16:05:04.469 CatalogService[2998:fb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIAppearance setBackgroundImage:forBarMetrics:]: unrecognized selector sent to instance 0x903b8d0' 我使用的代码是:[[UIToolbar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
    • 好的。您是否确定您实际使用的图像已加载?但首先,首先尝试设置 tintColor,查看您使用的方法是否实际被调用,以及 UIToolBar 是否响应您的方法调用。例如:[UIToolBar appearance].tintColor = [UIColor redColor];
    • 如果我尝试设置 tintColor,它会显示 Property 'tintColor' not found on Object of type 'id' ... 看起来有问题。 UINaviagtionBar 在这种情况下工作。我可以根据需要设置所有属性。
    • 好的。发现问题了! UIToolbar 包含在 ViewController 中。如果 UIToolbar 包含在 ViewController 中,我无法更改 AppDelegate 中的 UIToolbar。感谢您的帮助 matsr!
    • 还是有问题!我可以设置 TintColor 和 Alpha 值。但是,一旦我尝试设置 BackgroundImage,我就会在控制台中收到上述错误。我尝试分配的图像是有效的资源,因为我也为 UINavigationBar 设置了它,没有任何问题或错误!
    【解决方案2】:

    这里有一个很棒的教程:http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

    基本上是这样的:

    UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textured_32"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    [[UINavigationBar appearance] setBackgroundImage:gradientImage32 
        forBarMetrics:UIBarMetricsDefault];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2011-12-20
      相关资源
      最近更新 更多