Ios 将UIToolBar子类化为自定义背景时,工具栏的下半部分是黑色的?

Ios 将UIToolBar子类化为自定义背景时,工具栏的下半部分是黑色的?,ios,uinavigationcontroller,uitoolbar,Ios,Uinavigationcontroller,Uitoolbar,我正在对UIToolBar进行子类化,下面是我如何重写UIToolBar的drawRect方法: - (void)drawRect:(CGRect)rect { UIImage *backgroundImage = [UIImage imageNamed:@"UIToolBar_Background.png"]; [backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.

我正在对UIToolBar进行子类化,下面是我如何重写UIToolBar的
drawRect
方法:

- (void)drawRect:(CGRect)rect
{
    UIImage *backgroundImage = [UIImage imageNamed:@"UIToolBar_Background.png"];
    [backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
该应用程序使用UINavigationController范例,该范例使用
initWithNavigationBarClass
方法初始化


问题是工具栏的下半部分是黑色的?UIToolBar_Background.png的高度为44像素(视网膜为88像素)。它不应该有它的下半部分黑色

通过子类化UIToolBar并重写drawRect,可以消除UIToolBar自己的一些绘图。为什么不使用外观api设置背景图像:

[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"UIToolBar_Background.png"]
                        forToolbarPosition:UIToolbarPositionBottom
                                barMetrics:UIBarMetricsDefault];
或者,您可以使用子类化路线,只需确保在进行自己的绘图之前调用[super drawrect:rect]:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    UIImage *backgroundImage = [UIImage imageNamed:@"UIToolBar_Background.png"];
    [backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

感谢Marcel的反应,关键原因是我需要在我的工具栏中间有一个特大号按钮。这些教程中显示了类似的内容。现在,我已经在viewController上添加了一个工具栏作为视图,但我一直在努力使其始终处于正确的Y位置,尤其是在4英寸显示屏上。因此,我试图将所有内容封装在一个UIToolbar中;工具栏仍有一半被切断。这与默认的TintColor或barStyle有关吗?.png的下半部分具有alpha透明度。我相信这就是问题的原因。问题是由.png(UIToolBar_Background.png)具有alpha透明度引起的。-特别是图像的下半部分具有透明度,因此下半部分为黑色。-这让我相信我在UIImage实例上调用的drawInRect方法无法呈现透明度。这超出了我目前的知识来描述这是为什么。-我可以将上面的代码用于一个没有透明度的图像,a.png,然后显示整个图像。当我被允许时,我会将此评论转移到答案。您的外观API代码似乎使我的应用程序崩溃,我必须使用:[[UIToolbar外观]setBackgroundImage:[UIImage ImageName:@“UIToolbar_Background.png”]forToolbarPosition:UIToolbarPositionBottom barMetrics:UIBarMetricsDefault];