[ios] 장치의 실행 화면에서 UIImageView 이미지가 누락 됨

Xcode 7에 내장 된 iOS8 이상을 지원하는 앱이 있으며 시작 화면에 XIB를 사용하고 있습니다 (시작 이미지가 없습니다). 이보기에는 앱 버전의 단일 UILabel과 Images.xcassets에있는 이미지가있는 2 개의 UIImageView : 로고 및 스플래시 이미지가 포함됩니다.

응용 프로그램을 시작할 때 UILabel과 로고 이미지가 올바르게 나타나지만 iOS9가 설치된 iPad Air 2에서 앱을 실행하면 스플래시 이미지가 나타나지 않습니다. iOS8을 실행하는 Air 및 Mini와 iPad 2, iPad Air 및 iPad Air 2 용 iOS9 시뮬레이터에서 테스트했으며 이미지가 모두 올바르게 표시됩니다.

나는에 무슨 일이 일어나고 있는지 알아낼 수 있는지 확인하기 위해 몇 가지 기본적인 문제 해결을 실행하지만 난 그게 내가 일하고 이미지와 실패한 것 하나 사이에 볼 수있는 유일한 차이는 해결할 수 없었던 나는에 추가 자산…

내가 아는 것에 대한 요약은 다음과 같습니다.

  • 스플래시 이미지의 UIImageView가 올바른 위치에 올바른 크기입니다. 확인하기 위해 배경색을 녹색으로 설정했기 때문에 이것을 알 수 있습니다. 보기가 있지만 이미지가 나타나지 않습니다. 그래서 나는 그 견해가 비난되지 않는다고 가정합니다.

  • 로고 이미지도 사용하도록 스플래시 이미지의 UIImageView를 설정하면 로고 이미지가보기에 올바른 위치에 나타납니다. 이것은 또한 견해가 비난되지 않는다고 가정하게합니다.

  • 스플래시 이미지보기에서 사용중인 UIImage는 앱의 다른 곳에서 사용되며 다른보기에서는 잘 나타납니다 (로고 이미지는 앱의 다른 곳에서도 사용되며 잘 나타납니다). 따라서 이미지가 유효하고 다른보기에 이미지를 표시하는 것은 문제가되지 않는다고 가정합니다.

  • xcassets 파일의 로고 및 스플래시에 대한 UIImage 설정이 동일하다는 것을 확인했습니다. 이 값은 Universal, Any width and height, multiple scale factor로 설정되며 기본값으로 렌더링됩니다. 한 가지 차이점이 있습니다-로고에는 1x, 2x 및 3x 배율이 있고 스플래시 이미지에는 1x 및 2x 만 있지만 UIView에서는 1x 및 1x 및 2x 값만으로 UIImage를 사용해 보았습니다. 얼마 전에 프로젝트에 추가).

  • 다른 크기 또는 형식 (PNG 및 JPG)의 다른 이미지를 xcassets에 추가하고 스플래시 이미지에 대해 UIImageView에서 해당 UIImage를 사용하면 표시되지 않습니다.

  • XIB 파일에 다른 UIImageView를 추가하고 이미 xcassets에 있던 UIImage를 할당하면 이미지가 로딩 화면에 나타납니다.

  • 로고에 사용 된 이미지 파일을 복사하고 이름을 바꾸고 프로젝트에 추가 한 다음 스플래시보기에서 해당 UIImage를 사용하면 표시되지 않습니다.

  • 프로젝트를 청소하고 개발 컴퓨터를 다시 시작한 다음 Air 2에서 앱을 삭제하고 문제가 발생한 경우 다시 설치하려고했습니다.

이 마지막 세 단계는 프로젝트 파일의 수명에서 특정 시점 이후에 이미지가 추가되는 데 문제가 있다고 생각합니다. 어제 Xcode 7로 업데이트하는 동안 스플래시 이미지는 원래 Xcode 6에 추가되었지만 로고 이미지 (Xcode 6에도 추가)는 몇 달 전에 추가되었습니다.

로고 이미지와 스플래시 이미지의 json 파일을 살펴본 결과 동일한 형식으로 보입니다. 나는 또한 차이점을 찾기 위해 pbxproj 파일을 트롤링했는데 아무것도 볼 수 없습니다.

왜 누군가가 왜 Air 2에 추가하고있는 새로운 이미지가 시작 화면에 표시되지 않을지 궁금해하고 있습니까? 모두 표시되지 않는 이미지와 관련하여 읽은 다른 질문은 Launch Images 또는 관련 클래스가있는 XIB 파일의 이미지와 관련이있는 것 같습니다.



답변

껐다가 다시 켜십시오.

진심으로, 장치를 다시 시작하십시오 – 그것이 저를 위해 고쳐 준 것입니다.

작동하지 않는 것은 다음과 같습니다.

  • 파생 데이터 정리
  • 프로젝트 청소
  • 기기에서 앱 제거
  • Xcode 재시작
  • 컴퓨터 재시작

이전 관측치 :

다른 사람들과 마찬가지로

  • 시뮬레이터에서 잘 작동
  • 기기 (iPhone 5S, iPad Air)에서 작동하는 데 사용
  • 코드 변경 (git reset –hard HEAD를 통해 확인)이 없지만 작동이 중지되었습니다.

내가 작동을 멈춘 첫 번째 빌드를 시작한 것을 기억하는 것은 iPhone이 실행되는 동안 플러그를 뽑는 것입니다. 관련이 있는지 확실하지 않습니다.

그러나 git reset이 수정하지 않으면 (모든 정리 단계가 작동하지 않는 경우) 이것이 다른 곳에서 캐시되어야한다고 알려줍니다. 아마도 .gitignored 파일 중 하나에 있습니까? ( Xcode 프로젝트에 Git ignore 파일을 사용 하고 있습니다 )

하나의 UIImageView (3 개가있는 UIView)에서는 효과가 있었지만 다른 UI에서는 그렇지 않은 해결 방법은 이미지를 .xcassets 파일에 넣는 것입니다. 일반 이미지 파일로 되 돌리면 수정 프로그램이 실행 취소되지 않았습니다. (캐싱 오류처럼 느껴집니다.)

업데이트 : 참조 – 장치를 다시 시작하면 문제가 해결됩니다. 잘못된 비트 맵 데이터가 장치 자체에 캐시되고 있다는 느낌이 들었습니다.

레이더 : http://openradar.appspot.com/23534818


답변

“나를위한 해결책은 스토리 보드에서 UIImageView에 대해”그래픽 컨텍스트 지우기 “상자가 선택 해제되어 있는지 확인하는 것입니다. 이것을 바꾸면 해결되었습니다.” 다른 솔루션은 나를 위해 일하지 않았습니다. 애플 개발자 포럼 에서 가져 왔습니다

여기에 이미지 설명을 입력하십시오


답변

iPhone 6에서 정확히 같은 문제가있었습니다.

매우 이상한 사실은 크기, 압축, 색 공간이 동일한 내 이미지에서 다른 이미지를 사용할 수 있다는 것입니다.

왜 작동하지 않는지 찾을 수는 없지만 해결책을 찾았습니다. 파일을 images.xcassets 외부에 넣고 Interface Builder에서 확장명과 함께 전체 이름을 사용하십시오.

스토리 보드 샘플의 splashScreen

이 도움을 바랍니다!


답변

Xcode 7.3.1 및 iOS 9.3.4에서 다음과 같은 일련의 작업으로 인해 문제가 해결되었습니다.

  1. 빌드 정리 (⌘ + ⇧ + K)
  2. Xcode 닫기
  3. iOS 기기 강제 재설정 (전원 + 홈 버튼 재부팅)
  4. Xcode를 다시 시작하십시오-인덱싱이 완료되면 준비가 완료되면 장치에서 빌드하십시오.

답변

다른 많은 답변은 장치 재부팅 및 / 또는 재구성 및 / 또는 재설치가 해결책이라고 제안합니다.

이러한 답변은 우리 중 일부에게는 효과가 있지만, 이러한 이유는 앱이 캐시 된 스냅 샷을 “다시 가져 오거나”다시 작성해야하기 때문입니다.

캐시 된 스냅 샷은 스토리 보드 이미지가 포함 된 자산 카탈로그를 포함하여 지원 데이터가 메모리에로드되기 전에 앱에서 이미지를 표시하는 데 사용됩니다.

@jaga의 SO 답변 은 장치의 시작 화면에 시뮬레이터가 아닌 UIImageView가 누락 된 이유에 대한 해결책을 제공하지만 그 이유는 아닙니다.

배경

최근에 “Launch Screen.storyboard”파일에서 사용자 정의 글꼴을 사용하려고했습니다.

@TimCamber의 SO 답변 을 읽은 후에 내가 명확하게 알 수 없었던 이유 는 조금 더 연구하고 테스트해야했습니다.

시작 화면 스토리 보드 파일에 사용자 정의 글꼴이 포함되지 않은 이유는 자산 카탈로그 내의 이미지가 포함되지 않은 것과 같습니다.

이 앱은 실행 화면 스토리 보드 파일에서 앱 시작 화면의 세로 및 가로 스냅 샷을 준비하고 현재 번들로 앱 번들에 저장합니다.

  • /Library/Caches/Snapshots/<<app_bundle>>/
  • /Library/Caches/Snapshots/<<app_bundle>>/downscaled/.

이 프로세스는 사용자 정의 글꼴 및 자산 카탈로그를 포함하여 지원 파일을로드하기 전에 완료됩니다.

해결책

@jaga의 솔루션을 따라 위에서 언급했듯이 문자 그대로 필요한 것은 다음과 같습니다.

  1. (구식 학교) 이미지 번들 (.PNG)을 앱 번들에 추가합니다 (아래 스크린 샷에서 볼 수 있듯이 이미지 서브 디렉토리의 Supporting Files 서브 디렉토리 아래에 이미지 파일을 추가했습니다).

Xcode의 Project Navigator에서 관련 디렉토리의 스크린 샷

  1. Launch Screen Storyboard 파일의 UIImageView 객체에서 해당 이미지를 참조하십시오.

Xcode의 속성 관리자에서 UIImageView에 대한 이미지보기 섹션의 스크린 샷


답변

나는 같은 문제를보고 있었다. 기기를 재부팅 (iPhone 6)하고 기기에 앱을 재 구축하는 것이 유일한 문제입니다. 다른 많은 팁과 제안을 시도했지만 다른 방법은 없습니다. 재부팅 + 재구성 만 도움이되었습니다.


답변

내 솔루션 @iOS 11.x :

  • .jpg대신 이미지를 사용하십시오 .png. 이미지 파일 크기가 중요하다고 생각합니다.
  • (선택 사항) 이미지 파일을 프로젝트 디렉토리에 넣지 말고 .xcassets;