如果scrollview子视图宽度和contentsize width更多是某个浮点值(ContentSize width& subview width:95000),则UIScrollView变为空白

时间:2013-10-17 09:52:06

标签: iphone objective-c uiview uiscrollview

来自UIScrollView的非常奇怪的行为。请检查以下代码

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView *scrView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    scrView.delegate =self;
    [scrView setContentSize:CGSizeMake(95000, self.view.bounds.size.height)];
    scrView.backgroundColor = [UIColor clearColor];
    Testview *test = [[Testview alloc]initWithFrame:CGRectMake(0, 0, scrView.contentSize.width, self.view.bounds.size.height)];
    test.backgroundColor = [UIColor greenColor];
    [scrView addSubview:test];

    [scrView flashScrollIndicators];
    [self.view addSubview:scrView];
    self.view.backgroundColor = [UIColor clearColor];
}

Testview是Scrollview的子视图。

@implementation Testview

- (void)drawRect:(CGRect)rect {

    [super drawRect:rect];
}

在Testview类中,如果我调用方法 - (void)drawRect:(CGRect)rect,Uiscrollview将变为空白,无法在运行时查看scrollview。但是如果我评论drawRect方法

@implementation Testview

//- (void)drawRect:(CGRect)rect {
//    
//    [super drawRect:rect];
//}

它完美无缺。我正在解决这个问题,请帮助我解决这个问题。如果内容大小宽度和子视图宽度超过95000,我需要drawRect才能工作。

2 个答案:

答案 0 :(得分:1)

您的观点对普通-drawRect:来说太大了。您应该尝试使用CATiledLayer来支持您的观点。

答案 1 :(得分:0)

回答我的问题。如果我们使用CATiledLayer层,您将能够使用-drawRect:UIVIew,而不考虑给予scrollview的最大宽度子视图。但是每次需要显示一个tile时都会调用-drawRect:方法。这段代码帮助了我。

+ (Class) layerClass
{
    return [CATiledLayer class];
}