Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIBarButtonItem外观不适用于大小可调的图像和CAPInset_Ios_Uibarbuttonitem_Scaling_Appearance - Fatal编程技术网

Ios UIBarButtonItem外观不适用于大小可调的图像和CAPInset

Ios UIBarButtonItem外观不适用于大小可调的图像和CAPInset,ios,uibarbuttonitem,scaling,appearance,Ios,Uibarbuttonitem,Scaling,Appearance,问题:当使用设置时,未遵守UIBarButtonItem背景图像的缩放 我已经建立了一个项目,其中包含一些测试资产,用于实现我的目标。我有一张背景图片和两张我的uibarbuttoneim的图标图片。它们是: 背景(50x34): 图标(30x30): 这些图标是@2x版本(因此它们的大小是上面列出的两倍),但请放心,我在项目中也有标准资产(大小的一半) 创意,我知道!但问题是——我想在我的按钮背景图像上添加一些额外的填充物,以便图标只缩放背景图像的绿色部分。以下是我在AppDelegat

问题:当使用设置时,未遵守UIBarButtonItem背景图像的缩放

我已经建立了一个项目,其中包含一些测试资产,用于实现我的目标。我有一张背景图片和两张我的uibarbuttoneim的图标图片。它们是:

背景(50x34):

图标(30x30):

这些图标是@2x版本(因此它们的大小是上面列出的两倍),但请放心,我在项目中也有标准资产(大小的一半)

创意,我知道!但问题是——我想在我的按钮背景图像上添加一些额外的填充物,以便图标只缩放背景图像的绿色部分。以下是我在AppDelegate中的代码:

UIImage *bgImage = [[UIImage imageNamed:@"testbutton2"] resizableImageWithCapInsets:UIEdgeInsetsMake(16, 20, 16, 20)];
[[UIBarButtonItem appearance] setBackgroundImage:bgImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
这对于第一个维吾尔人来说非常有效。但是,对于每个后续实例,图像的可调整大小部分都会被完全忽略。请查看:

如你所见,在第一屏上,一切都按计划进行。然而,每一个后续使用的uibarbuttonite是不正确的规模

现在,我确实解决了这个问题。我必须在每一个uibarbuttonite的实例上设置外观。为此,我创建了一个通用UIViewController超类,所有视图控制器都继承自该超类。在其中,我有以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIImage *bgImage = [[UIImage imageNamed:@"testbutton2"] resizableImageWithCapInsets:UIEdgeInsetsMake(16, 20, 16, 20)];

    [self.navigationItem.rightBarButtonItem setBackgroundImage:bgImage
                                                      forState:UIControlStateNormal
                                                    barMetrics:UIBarMetricsDefault];

    [self.navigationItem.leftBarButtonItem setBackgroundImage:bgImage
                                                     forState:UIControlStateNormal
                                                   barMetrics:UIBarMetricsDefault];
}
这将产生以下结果:

所以我想我找到了解决这个问题的方法,但是我仍然有点困惑,为什么我最初的实现没有工作。在我看来,外观代理的用途是不必更改对象的每个单独实例的外观,这正是我最终必须做的。有人能解释一下这里发生了什么事吗?这是一个错误,还是我做错了什么