iOS 네비게이션바(Navigationbar)의 좌우 툴바버튼이 폭 균형이 맞지 않을경우, 타이틀 레이블의 중앙 정렬이 한쪽으로 쏠리면서 좋지 않게 보인다. 이를 방지하여 레이블을 강제로 중앙 정렬하기 위해서 다음과 같은 방법들이 있으니 상황에따라서 적절히 적용하면 된다.
방법1:
viewWillAppear:
에서 titleView를 hide했다가 viewDidAppear
에서 titleView의 위치를 원하는대로 설정 후 unhide
이경우 타이틀레이블의 트랜지션 애니메이션은 보이지 않게되니 네비게이션 push동작이있는 상황에서는 쓰지 않는것을 추천한다.
방법2:
네비게이션바의 타이틀뷰에 UILabel
을 상속받은 CustomTitleLabel
를 set.
navigationItem.titleView = [[CustomTitleLabel alloc] init];
네비게이션바의 레이아웃이 조정될때 자동으로 titleView의 frame값도 같이 조정되게 되는데, 기본적으로 중앙정렬을 하는 동작이 일어나게 된다. 해당 동작이 일어나는 것을 막기위해 CustomTitleLabel
의 setFrame:
메서드를 오버라이드하여 setFrame:
의 동작을 마음대로 조정한다.
오버라이드된 setFrame:
이 여러번 불리면서 부작용이 있을수가 있으니 특별한 경우에만 주의해서 사용한다.
방법3:
CustomWrapperView안에 UILabel을 subview로 추가한 후 해당 서브뷰의 위치를 제어하는 트릭을 이용한다.
CustomWrapperView의 frame이 변경될때 자동으로 viewDidLayoutSubview가 호출되는데 이 메서드 안에서 서브뷰로 추가되어있는 레이블의 위치를 적절히 설정해준다.