2013 이전/iOS개발

[iOS 개발] UIButton title, image 위치 정리

하구루 2017. 2. 25. 16:32

UIButton을 사용하다 보면 title, image등을 버튼위에 올려서 사용하게 된다. 

그런데 이들이 깔끔하게 배치되지 않을때가 많다.

UIButton의 titleLabel의 frame을 직접 적용해도 변화가 없을 것이다.
그래서 대부분 포기하고 버튼 위에 따로 View를 올리는 경우가 있는데,
이럴 경우 버튼 state 마다 위에 올린 뷰를 수동으로 바꿔 주어야 한다.
특히, UIControlStateHighlighted 를 처리하려면 소스가 지저분해지고 번거러워 질 수 밖에 없다.  
다행히도 이들을 배치할 수 있는 방법은 존재한다.
일단 image, title의 Alignment를 정해줄수 있는데 아래와 같이 가능하다.
  [btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
    [btn setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
각각 가로 세로의 정렬을 관리할수 있다.
해당 메소드는 UIControl에 포함된 메소드로 이를 상속 받은 UI들은 모두 사용할 수 있다.
위와 같이 배치를 하면 어느정도 원하는 모양을 가질 수 있지만, 아직 부족하다고 느낄수 있다.
좀더 세밀한 보정이 필요할때 아래와 같이 가능하다.
    [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)];
    [btn setImageEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)];
    [btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)];
각각 Image와 Title의 EdgInsets을 지정해 줄 수 있는데, EdgeInsets은 각각 top, left, bottm, right 를 나타내고,
이를 통해서 위치 조정이 가능하다.
EdgeInsets의 자세한 내용은 해당 링크를 참조하기 바란다.

그리고 두개를 모두 같이 보정하고 싶을때는, contentEdgeInsets를 조정해 주면 된다.

이를 이용하면 버튼을 휠씬 간편하고 깔끔하게 관리 할 수 있게 된다.
간단하지만, 모르고 넘어가서 고생을 할 수있는 부분이다.
이것 때문에 지저분해진 소스가 있다면 지금 바로 수정해 보기 바란다.


반응형