UIImageView не всегда отображается

Я отлаживаю проблему, когда изображение не отображается.

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]; 

Странная часть заключается в том, что иногда изображениеView отображается, иногда это не так (примерно в 75% времени, когда оно отображается).

imageView не доступен нигде, кроме кода выше.

Я заметил, что когда изображение не отображается , первый оператор журнала показывает, что:

imageView сразу после инициализации: <UIImageView: 0x9eaa760; frame = (0 0; 0 0); userInteractionEnabled = НЕТ; layer = <CALayer: 0x9ec04a0 >>

Когда отображается изображение :

imageView сразу после инициализации: <UIImageView: 0xaa61ad0; frame = (0 0; 644 88); opaque = NO; userInteractionEnabled = НЕТ; layer = <CALayer: 0xaa61330 & rt; & rt;

EDITED: Я провел десятки тестов, imageView всегда ведет себя одинаково: когда он не отображается, исходный кадр (0 0; 0 0). Когда это не так, это всегда какая-то другая ценность.

PS Я не использую ARC.

3 Solutions collect form web for “UIImageView не всегда отображается”

В вашем журнале UIImageView отображается frame = (0 0; 0 0); Это означает, что представление не будет отображаться, так как оно имеет высоту и ширину 0. Это означает, что изображение не имеет размера или равно nil .

Причина этого, скорее всего, связана с тем, что изображение, которое вы пытаетесь загрузить, не найдено: вы должны проверить, не найдено ли изображение:

 UIImage *image = [UIImage imageNamed:imageName]; if (!image) { NSLog(@"Image could not be found: %@", imageName); } imageView = [[UIImageView alloc] initWithImage:image]; 

Это означает, что даже если вы измените рамку, вы все равно ничего не увидите, поскольку изображение не загружено.

Почему вы не устанавливаете кадр первым и не устанавливаете изображение дальше?

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

В дополнение к ответу rckoenes вы всегда должны проверить, существует ли изображение внутри вашего пучка пакетов :

 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 загружать его.

  • iOS, отображающее изображение заголовка таблицы (эффект Parallax)
  • Как получить представление таблицы для прокрутки над изображением?
  • Повернуть UIImageView вокруг своей центральной точки?
  • UICollectionView insertItemsAtIndexPaths: исключение исключений
  • Обрезать изображение снизу программно
  • Сжатие файла NSKeyedArchiver, включающего UIImageView с загруженным изображением
  • iOS Aspect Fill Image Resizing с содержимым, совпадающим с левым / верхним краем
  • Как повернуть изображение на ощупь и перетащить изображение поверх другого изображения
  • Передача изображения из одного вида в другое
  • Обнаружение касания не работает в UIImageView
  • CGAffineTransformRotate в viewDidLoad растягивает / увеличивает UIImageView
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.