UIImageView并不总是显示

时间:2013-09-09 08:33:01

标签: ios objective-c uiimageview

我正在调试未显示imageView的问题。

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
NSLog(@"imageView right after initialization is: %@", imageView);

imageView.frame = CGRectMake(2, 0, 316, 45);
imageView.layer.zPosition = zPos;
NSLog(@"imageView after running the setters: %@", imageView);

[self.view addSubview:imageView];

奇怪的是,有时会显示imageView,有时则不显示(大约75%的时间显示)。

除上述代码外,不会访问

imageView

我注意到,当imageView 未显示时,第一个日志语句会显示:

  

imageView刚刚初始化后:< UIImageView:0x9eaa760;   frame =(0 0; 0 0); userInteractionEnabled = NO; layer =< CALayer:   0x9ec04a0>>

显示图像视图

  

初始化后的imageView是:< UIImageView:0xaa61ad0;   frame =(0 0; 644 88); opaque = NO; userInteractionEnabled = NO;层   =< CALayer:0xaa61330& rt;& rt;

EDITED: 我运行了数十次测试,imageView总是表现相同:当它没有显示时,初始帧是(0 0; 0 0)。如果不是,它总是有其他价值。

P.S。我没有使用ARC。

3 个答案:

答案 0 :(得分:2)

为什么不先设置框架然后再设置图像?

 imageView = [UIImageView alloc]initWithFrame:CGRectMake(0,0,35,35)];
 [imageView setImage:[UIImage imageNamed:@"img.png"]];

答案 1 :(得分:2)

UIImageView显示frame = (0 0; 0 0);的日志中,这意味着视图将不会显示,因为它的高度和宽度为0.这表示图片没有大小或是{ {1}}。

造成这种情况的原因很可能是因为找不到您要加载的图像: 您应该检查是否找到图像:

nil

这意味着即使您更改了框架,由于没有加载图像,您仍然看不到任何内容。

答案 2 :(得分:1)

除了rckoenes answer之外,您必须始终先检查图片中是否存在图片:

NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *documentsDirectory 
        = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
             objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:imageName];
    if([fileManager fileExistsAtPath:path])
    {
       UIImage *image = [UIImage imageNamed:imageName];
       if (!image) {
          NSLog(@"Image could not be found: %@", imageName);
       }

       imageView = [[UIImageView alloc] initWithImage:image];
    } else {
       NSLog(@"%@ is not included in the app file bundle!", imageName);
    }

通过这种方式,您可以知道问题是否是b / c,您首先没有该文件..或者b / c文件有问题阻止iOS加载它。