我正在调试未显示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。
答案 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加载它。