2011-03-22 6 views
1

좋아,이 작업을 성공적으로 수행하는 데 어려움을 겪고 있습니다. 기본적으로 UIView에 UILabel을 추가하고 가운데에 배치하려고합니다.UILabel의 SetCenter 문제

코드는 다음과 같습니다

UIView *customTitleView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)]; 
[customTitleView setBackgroundColor:[UIColor clearColor]]; 

// Screen title 
CGSize constraint = CGSizeMake(200.0, 44.0f); 
CGSize size = [screenTitle sizeWithFont:[UIFont boldSystemFontOfSize:20.0] 
         constrainedToSize:constraint 
          lineBreakMode:UILineBreakModeCharacterWrap]; 

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, size.width, size.height)]; 
[titleLabel setText:screenTitle]; 
[titleLabel setTextColor:[UIColor whiteColor]]; 
[titleLabel setFont:[UIFont boldSystemFontOfSize:20.0]]; 
[titleLabel setBackgroundColor:[UIColor clearColor]]; 

titleLabel.center = customTitleView.center; 

[customTitleView addSubview:titleLabel]; 
[titleLabel release]; 

self.navigationItem.titleView = customTitleView; 
[customTitleView release]; 

내가 UILabel의가있는 UIView 내에서 중심 것이라고 예상했다. 글쎄, 그건 아니야. 그것은 어떻게 든 오른쪽 정렬 및 UIView의 중심에 가깝지 않습니다.

내가 뭘 잘못하고 있니?

+0

방금 ​​귀하의 코드를 사용해 보았습니다. 그리고 저를 위해 올바르게 작동하고 있습니다 (레이블은 올바르게보기 중심에 위치 함). 아마도 다른 뭔가가 그것을 방해하고 있을까요? – jnic

+0

Ooops, 사용자 정의 UIView가 상단 네비게이션 바에서 titleView 속성을 대체한다는 점을 잊어 버렸습니다. 나는 게시 된 코드를 업데이트 할 것이다. – TeodorC

+0

시도해보십시오 'UILabel * titleLabel = [[UILabel 할당] initWithFrame : CGRectMake (customTitleView.frame.size.width/2 크기. 폭/2, customTitleView.frame.size.height/2 크기. 높이/2, size.width, size.height)] ' 제목 라벨을 초기화하려면 – Seega

답변

0

그래서 여기에 잘못 무슨 일이 일어나고 있는지의 :

self.navigationItem.titleView = customTitleView; 

당신이 customTitleView의 프레임이 변경됩니다 탐색 항목의 제목보기로 customTitleView을 설정합니다. customTitleView은 더 이상 320 픽셀의 너비가 아니지만 titleLabel의 프레임은 동일하게 유지됩니다. 따라서 더 이상 중심에 있지 않게됩니다.

titleLabeltitleView으로 설정할 수 없습니까? 자동으로 중심에 위치해야한다고 생각합니다. 그렇지 않은 경우이를 해결하기위한보다 복잡한 방법을 알고 있습니다. 코멘트를 버리면 내가 어떻게 말할거야.

편집 : 따라서 customTitleView의 프레임이 변경된 후 titleLabel을 재정렬하는 방법은 다음과 같습니다.

보기 프레임이 변경되면 해당보기에서 layoutSubviews이 호출됩니다. 따라서 customTitleView을 보통 UIView으로 지정하는 대신 UIView을 상속하는 사용자 정의보기로 만들어야합니다. 해당 사용자 정의보기에서 layoutSubviews을 덮어 쓰고 layoutSubviews 구현에서 모든 항목이 새 프레임 (self.frame)을 기반으로 원하는 방식으로 정렬되어 있는지 확인하십시오. 구현을 맡길 것입니다.

+0

문제점을 해결해 주셔서 감사합니다. 문제는 titleLabel이 최상위 탐색 모음에 있어야하는 유일한보기가 아니라는 것입니다. 나는 여전히 오른쪽에 두 개의 단추가 있습니다. 그러나 실제로 titleLabel을 titleView로 직접 설정하면 기본적으로 가운데에 배치됩니다. – TeodorC

+0

@TeodorC 'self.navigationItem.rightBarButtonItem' 및/또는'self.navigationItem.leftBarButtonItem'을 사용하는 경우에는 문제가되지 않습니다. –

+0

@Erik self.navigationItem.rightBarButtonItem은 버튼을 1 개만 설정합니다. 맞습니까? 두 단추가 차례로 있으면 self.navigationItem.rightBarButtonItem을 사용할 수 없습니다. – TeodorC

관련 문제