iOS 타이틀레이블 위치 강제 조정

iOS 네비게이션바(Navigationbar)의 좌우 툴바버튼이 폭 균형이 맞지 않을경우, 타이틀 레이블의 중앙 정렬이 한쪽으로 쏠리면서 좋지 않게 보인다. 이를 방지하여 레이블을 강제로 중앙 정렬하기 위해서 다음과 같은 방법들이 있으니 상황에따라서 적절히 적용하면 된다.

방법1:

viewWillAppear:에서 titleView를 hide했다가 viewDidAppear에서 titleView의 위치를 원하는대로 설정 후 unhide
이경우 타이틀레이블의 트랜지션 애니메이션은 보이지 않게되니 네비게이션 push동작이있는 상황에서는 쓰지 않는것을 추천한다.

방법2:

네비게이션바의 타이틀뷰에 UILabel을 상속받은 CustomTitleLabel를 set.
navigationItem.titleView = [[CustomTitleLabel alloc] init];

네비게이션바의 레이아웃이 조정될때 자동으로 titleView의 frame값도 같이 조정되게 되는데, 기본적으로 중앙정렬을 하는 동작이 일어나게 된다. 해당 동작이 일어나는 것을 막기위해 CustomTitleLabelsetFrame: 메서드를 오버라이드하여 setFrame:의 동작을 마음대로 조정한다.

오버라이드된 setFrame:이 여러번 불리면서 부작용이 있을수가 있으니 특별한 경우에만 주의해서 사용한다.

방법3:

CustomWrapperView안에 UILabel을 subview로 추가한 후 해당 서브뷰의 위치를 제어하는 트릭을 이용한다.
CustomWrapperView의 frame이 변경될때 자동으로 viewDidLayoutSubview가 호출되는데 이 메서드 안에서 서브뷰로 추가되어있는 레이블의 위치를 적절히 설정해준다.