iOS Swift/Today I Learned

아이패드는 traitCollectionDidChange를 알까?

호두빵 2024. 2. 26. 22:59

 

제목은 너무 어그로같이 썼지만 아무튼..아이폰과 아이패드 모두에서 어색함 없이 나타나는 레이아웃을 만드는 과정은 꽃길(아니고 가시밭길)과도 같습니다. 사용자가 어떤 환경에서 앱을 사용할지 모르기 때문에 가급적이면 대다수의 기기에 호환되도록 레이아웃을 구성하는 것이 좋은데요, 한동안 아이폰으로만 개발을 하다가 아이패드도 마찬가지로 지원해야 한다는 사실을 깨닫고 부랴부랴 테스트에 나선 호두빵.. 한 가지 이상한 현상을 확인합니다. 아이폰에서는...잘 됐는ㄷㅔ... 웨않되?..?

 

내가 잘못 본건가? 브레이크포인트가 전혀 잡히지 않는 것 같은데? 흠..전 직장에서 팀장님이 해주신 말이 떠오릅니다.

 

"코드는 거짓말을 하지 않는다. 원하는대로 나오지 않는다면 너가 뭔가 잘못 하고 있는 것.." 

 

구글아 도와줘. 바로 검색해봅니다. 영어로 주절주절...ipad doesn't recognize traitCollectionDidChange.... 이런 무맥락 글을 찰떡같이 알아듣고 스택오버플로우 질문 글이 바로 나와줍니다.

 

https://stackoverflow.com/questions/36884376/swift-how-to-refresh-uicollectionview-layout-after-rotation-of-the-device/58730667#58730667

 

Swift: How to refresh UICollectionView layout after rotation of the device

I used UICollectionView (flowlayout) to build a simple layout. the width for each cell is set to the width of screen using self.view.frame.width but when I rotate the device, the cells don't get u...

stackoverflow.com

 

Please understand this...

 

제발 이것을 이해하세요.. 아이패드에서는 아무리 해도 저 함수를 호출할 수 없다. 왜냐하면 아이패드의 size class는 portrait이든 landscape인지 상관없이 모두 .regular이기 때문에...그러니까 아무리 돌리고 돌려도 변화가 없는 것이나 마찬가지이기 때문에 영원히 호출되지 않는 것이였어요. 아이폰의 경우 가로에서 세로, 세로에서 가로로 돌릴 때 UITraitCollection.current.horizontalSizeClass, verticalSizeClass 같은 것들이 변하기 때문에 이것을 토대로 아 사용자가 돌렸구나 하고 알 수 있는데 아이패드의 경우 그것이 무용지물인 것입니다. 따라서 이러한 경우에는 traitCollectionDidChange 함수보다는 viewWillTransition과 같은 함수를 사용하는 것이 좋겠다는 것을 배웠습니다.