0

此代码适用于 iPad Simulator 4.2,但不适用于更高版本的 iOS4.3 或之后的版本。我无法覆盖 UIToolbar 类方法。

@implementation UIToolbar (CustomImage)
- (void)drawRect:(CGRect)rect 
{
    UIImage *image = [[UIImage imageNamed:@"ToolBar.png"] retain];
    [image drawInRect:rect];
    [image release];    
}
 //return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize result = [super sizeThatFits:size];
    result.height = 80;
    return result;
};  

什么是替代解决方案?请指导我。在以后的版本中 ..- (void)drawRect:(CGRect)rect 永远不会被调用。

使用 iPad Simulator 4.2 代码运行正常,但从未调用 iPad Simulator 4.3 drawRect。

下面是工具栏的截图:

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

您正在将它作为一个类别来实现,您需要根据 iOS5 更改日志对 UIToolBar 进行子类化

在 iOS 5 测试版中,UINavigationBar、UIToolbar 和 UITabBar 的实现发生了变化,因此不会在这些类的实例上调用 drawRect: 方法,除非它在子类中实现。

在这些类中的任何一个类别中重新实现 drawRect: 的应用程序会发现 drawRect: 方法没有被调用。

UIKit 会进行链接检查以防止在 iOS 5 之前链接的应用程序中调用该方法,但在 iOS 5 或更高版本上不支持此设计。应用程序可以:

  • 使用 iOS 5 及更高版本中的 bar 的自定义 API,这是首选方式。
  • 子类 UINavigationBar(或其他栏类)并覆盖子类中的 drawRect:。
于 2011-10-24T23:35:54.520 回答
1

这样的事情呢?

@implementation UIToolbar (UIToolbarCategory)
- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    if([self isMemberOfClass: [UIToolbar class]]){
        [super drawRect:rect];
        UIImage *image = [UIImage imageNamed:@"bar_gradient.png"];
        [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
}
@end
于 2011-09-14T07:25:34.683 回答