4

나는 UIView의 하위 클래스를 다음 코드 줄을 사용하여 navigationItemtitleView로 추가했습니다.navigationItem.titleView layoutSubviews에 대한 올바른 경계 가져 오기

self.navigationItem.titleView = tempview; 

쉽습니다. 그건 잘 작동합니다. 내 문제는이 navigationItem에는 때로는 rightBarButton 업데이트 (때로는 버튼이 없으며 때로는 하나의 표준 크기 버튼이 있고 때로는 더 큰 버튼이 있음)입니다.

titleView로 추가 한 tempview 클래스의 layoutSubviews 메서드를 사용하여 다음과 같이 입력 할 수 있습니다.

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    self.mylabel.frame = self.bounds; 
} 

이 함수는 작동하지 않습니다. rightBarButton 항목이 업데이트되면 제목보기 크기를 올바르게 조정하십시오.

경계가 더 작아지면 성장하지 않는 것을 눈치 챘는데, 단순히 위치를 변경합니다.

setNeedsLayoutlayoutIfNeeded을 사용해 보았습니다.하지만 단순히 잘못된 경계로보기 크기를 "크기 조정"합니다.

또한 rightBarButton 항목이 nil로 설정되어 있는지 확인했지만 뷰가 여전히 축소되면 올바르게 확장되지 않습니다.

어떤 도움을 주셔서 감사합니다!

답변

0

-layoutSubviews을 덮어 쓰는 대신 autoresizingMask 속성을 설정해 보셨습니까?

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
+1

나는 그것을 시도했지만 'layoutSubviews'접근 방식과 다른 것을 수행하는 것처럼 보이지 않는다. 그래도 고마워! – mjdth

2

기본적으로 layoutSubviews는 아무 작업도 수행하지 않습니다. titleView의 크기를 절대 변경하지 않으므로 navbar가 자동으로 수행하지 않는 한 아무 것도 변경되지 않습니다.

서브 뷰 중 하나의 크기 만 변경 했으므로 autoresize가 작동한다고 생각하지 않습니다. 자동 뷰 뷰 (활성화 된 autoresizesubviews가있는)가 크기를 변경하면 트리거된다는 것이 확실하기 때문에 자동 크기 조정이 작동하지 않을 것이라고 생각합니다. rightbutton을 변경할 때 titleview의 크기를 다시 계산하는 것이 좋습니다. 처음으로 추가 할 때 자동으로 맞으면 제거하고 읽을 수 있지만 상당히 추한 해킹입니다.

4

이제보기 컨테이너의 크기를 일치, 자동 크기 조정이 다음

- (void)willMoveToSuperview:(UIView *)newSuperview 
{ 
    [self setFrame:[newSuperview bounds]]; 
} 

을 구현

[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

(아마도 initWithFrame에서)

와보기를 구성합니다.

+0

왜 이것이 정답으로 표시되지 않습니까? 이것은 훌륭한 팁입니다 - willMoveToSuperview가 핵심입니다 –

관련 문제