티스토리 뷰

반응형

안녕하세요 :) Zedd입니다.

제목을...이렇게 밖에 지을 수가 없었는데

< UIButton/UILabel에 이미지 추가 >글을 제가 얼마전에 썼었는데요, 

이렇게 줘버리면...크나큰 문제가 하나 있습니다. 

바로 디바이스별 화면 대응?을 못한다는 것이죠. 예를 하나 들어볼께요. 





자..이렇게 하고...아이폰 8+로 실행해볼게요. 


(스토리보드 상에서는 하트가 오른쪽 끝에 가있는데, 아이폰 8+에선는 그렇지 않은 이유는....스토리보드상에서는 아이폰8이기 때문)

그런데...아이폰 SE에서는...!






이렇게 나오게 되죠. 

이유는 간단하죠? 우리가 



이렇게 물리적인? 값으로 줬기 때문입니다. 저 이미지는 항상 titleLabel과 저 상수값만큼 떨어진 곳에 위치하게 되죠. 

그럼?? 이 상수값을 디바이스 마다 다르게 주면 되겠죠?!?!?!? XD

이걸 어떻게 할지 생각해봅시다. 


일단...저는 오른쪽 끝에!!! 놓을 생각인데..




저 길이를 어떻게 구하면 될까요? 

제가 생각하기엔 

전체 View넓이 - (leading constant + trailing constant + 버튼 타이틀 Label의 너비)가 될 것 같아서...


1
2
3
4
5
func setupImageInset(){
        guard let buttonTitle = myButton.titleLabel else {return}
        buttonTitle.sizeToFit()
        myButton.imageEdgeInsets.left = self.view.frame.width - 32 - buttonTitle.frame.width
 }
cs


이렇게 했어요 32를 빼준거는...

그 리딩이랑 트레일링 constant구하는게 조금 코드가 더러워서 그냥 값으로..줬어요!

이렇게 하면..



SE나 8+에서 이쁘게 잘 나오는 것을 볼 수 있죠. 흐흐

별거 없죠!?!?!?

제 코드도 조금 음...별로 안좋은 코드일거라고 생각하시는 분들도 있을지도 모르겠어요..! 오토레이아웃 constant를 직접 빼줘서 ㅠㅠㅠ 혹시 지적하실 부분이나 개선할 수 있는 점을 알려주시면 감사하겠습니다 :) 

즐거운 주말 보내세요 XD

반응형