HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS 7中的UIBarButtonItem外观问题,这可能是Apple的bug吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我前段时间看到一篇文章,它在这里

User Interface Customization in iOS 6

显示了iOS 6的自定义.由于我撰写了使用该技术的应用程序的文章,它非常简单,没有任何魔力.

但是,我需要更新我的一个应用程序,在iOS 7下它无法正常工作.看来,UIBarButtonItems的自定义在第一次显示视图时不起作用.如果我解雇视图然后呈现它agin一切正常.看到的内容如下所示:

第一次观看:

第二次:

我在他的例子中看到了这个问题,我的代码和我写的测试应用程序.代码如下:

// Customizing the BACk Bar Buttons
UIImage * btBACk_30 = [[UIImage imagenamed:@"btBACk_30"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,13,5)];
UIImage * btBACk_24 = [[UIImage imagenamed:@"btBACk_24"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,12,5)];
[[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_24 forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];

你可以看到没有真正的魔法,非常标准,但我找不到任何理由或解释为什么这在iOS 7中不起作用.代码在 – (BOOL)应用程序中执行:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions.

我希望有人看到这个,并提供解决方案.谢谢你的帮助!

**注意:有人提出这不是苹果虫,而是设计.我并不是说这是一个苹果问题,它可能更像是我的问题,但是如果你运行任何一个样本或者复制并粘贴下面的代码,很明显它第一次不能正常工作,而后续工作也是如此.这会让我相信api调用是有效的,但要么他们有错误,要么我错过了需要做的事情.

****更新4:**

我根据FruityGeek的建议将MyAppDelegate的init方法中的代码更改为以下内容,但仍然没有运气:

- (instanCETypE)init
{
    self = [super init];
    if (self)
    {
        //Other UIAppearance proxy calls go here

        [[UIBarButtonItem appearance] settitleTextAttributes:
         [NSDictionary DictionaryWithObjectsAndKeys:
          //[UIColor colorWithRed:220.0/255.0 green:104.0/255.0 blue:1.0/255.0 alpha:1.0],[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],UITextAttributeTextColor,//[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0],[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor,[NSValue valueWithUIOffset:UIOffsetMake(0.5,0.5)],UITextAttributeTextShadowOffset,[UIFont systemFontOfSize:12.0],UITextAttributeFont,nil]
                                                    forState:UIControlStateNormal];

        // Customizing the BACk Bar Buttons
        //ios6 uses whole button BACkground image
        UIImage * btBACk_30 = [[UIImage imagenamed:@"btBACk_30"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
        UIImage * btBACk_24 = [[UIImage imagenamed:@"btBACk_24"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
        [[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_24 forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];

        if ([[UIDevice currentDevice].systemVersion IntegerValue] >= 7)
        {
            //ios7 needs additional chevron replacement image
            UIImage * chevronreplacement = chevronreplacement = [btBACk_30 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            UIImage * chevronTransitionMaskreplacement = chevronTransitionMaskreplacement = [btBACk_30 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            [[UINavigationBar appearance] setBACkInDicatorImage:chevronreplacement];
            [[UINavigationBar appearance] setBACkInDicatorTransitionMaskImage:chevronTransitionMaskreplacement];
        }
    }
    return self;
}

****更新3:**

我已经为示例项目添加一个dropBox链接.这是上面已经发布的链接的补充,这是一个简单的应用程序,也显示了该问题.两者都可以在iOS 6和iOS 7的模拟器中构建和运行.在iOS 6的情况下,一切都按预期工作.在iOS 7中,如果单击表格单元格并显示一个视图,则不会显示自定义后退按钮,如果您返回并再次显示该按钮,则会显示该按钮.

我已经愚弄了好几天,所以我希望别人看到它并告诉我我错过了什么.

https://www.dropbox.com/s/oi1bh3emvtbmms0/NavigationBarDemo.zip

这可能很愚蠢,但它可能与我的图像有关吗?我将尝试使用不同的图像并发布更新.

>尝试使用不同的图像并没有区别,也使用了上面发布的样本中的图像.这是一个很长的镜头,但由于似乎没有人有更好的想法,但值得一试.

****更新2:**

我在另一个测试应用程序中尝试了这个并将代码移动到init
应用程序委托,它仍然无法正常工作.我有这个
发布在这里以及原始作者网站的链接
最佳.再加上一个论坛,但似乎没有人有解决方案.

我想知道这可能是一个苹果虫?

****更新1:**

代码从didFinishLaunchingWithOptions移动到willFinishLaunchingWithOptions和init,它似乎仍然不起作用.

***** INIT METHOD FROM AppDelegate.m

- (id)init
{
    // Create resizable images
    UIImage *gradientImage44 = [[UIImage imagenamed:@"navBar_44"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,0)];
    UIImage *gradientImage32 = [[UIImage imagenamed:@"navBar_32"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,0)];

    // Set the BACkground image for *all* UINavigationBars
    [[UINavigationBar appearance] setBACkgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBACkgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];

    // Customize the Title TEXT for *all* UINavigationBars
    [[UINavigationBar appearance] settitleTextAttributes:
     [NSDictionary DictionaryWithObjectsAndKeys:
      [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],[NSValue valueWithUIOffset:UIOffsetMake(1,1)],[UIFont boldSystemFontOfSize:18.0],nil]];

    // Customizing the NavBar Buttons
    UIImage * button30 = [[UIImage imagenamed:@"btButton_30"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5,5)];
    UIImage * button24 = [[UIImage imagenamed:@"btButton_24"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
    [[UIBarButtonItem appearance] setBACkgroundImage:button30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBACkgroundImage:button24 forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];

    [[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];

    [[UIBarButtonItem appearance] settitleTextAttributes:
     [NSDictionary DictionaryWithObjectsAndKeys:
      //[UIColor colorWithRed:220.0/255.0 green:104.0/255.0 blue:1.0/255.0 alpha:1.0],nil]
                                                forState:UIControlStateNormal];

    // Customizing the BACk Bar Buttons
    UIImage * btBACk_30 = [[UIImage imagenamed:@"btBACk_30"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
    UIImage * btBACk_24 = [[UIImage imagenamed:@"btBACk_24"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
    [[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBACkButtonBACkgroundImage:btBACk_24 forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];

    return [super init];
}

解决方法

它确实看起来像一个Apple bug,你应该在bug报告器上输入一个bug.也就是说,我可以给你一个相对无痛的解决方法:将此代码添加到RecipetTableViewController:
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"Recipe Book";

    UIBarButtonItem *it = [[UIBarButtonItem alloc] initWithtitle:self.title style:UIBarButtonItemStylePlain target:nil action:NULL];
    UIImage * btBACk_30 = [[UIImage imagenamed:@"btBACk_30"] resizableImageWithCapInsets:UIEdgeInsetsmake(0,5)];
    [it setBACkButtonBACkgroundImage:btBACk_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    self.navigationItem.BACkBarButtonItem = it;
}

编辑:你可以重复这个错误,如果感兴趣,引用它的bug越多苹果将修复它:

编辑:我很高兴再次说,在bug记者中输入错误,有时确实有效!

大佬总结

以上是大佬教程为你收集整理的iOS 7中的UIBarButtonItem外观问题,这可能是Apple的bug吗?全部内容,希望文章能够帮你解决iOS 7中的UIBarButtonItem外观问题,这可能是Apple的bug吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。