2016-10-20 2 views
0

컨트롤러보기에서 자동 레이아웃을 사용하려는 타사 위젯이 있습니다. 그 동안 위젯이 수동으로 서브 뷰를 initWithFrame: 메소드로 레이아웃했다.수동으로 서브 뷰를 레이아웃하는보기에서 자동 레이아웃을 사용할 수 있습니까

예상대로 위젯의 프레임을 만들 수 있지만 서브 프레임의 프레임은 ZERO입니다.

어떻게 함께 섞을 수 있습니까? 위젯을 수정할 수 없습니다. 그리고 didLayoutSubivews에서 아무 작업도 수행하지 않고 위젯 인스턴스를 만들기 전에 [self setNeedLayout][self layoutIfNeeded]을 호출합니다. 초기화 할 때 서브 뷰를 즉시 레이아웃하기 때문에

답변

0

didLayoutSubviews에서 아무 것도 할 수 없다고하는 이유가 확실하지 않습니다. 위젯이 initWithFrame의보기 만 설정하고 크기를 다시 계산하지 않으면 장소 만 수행 할 수 있습니다. 볼 수있는 두 가지 옵션은 다음과 같습니다.

1) 뷰 제약 조건을 만족하면 수동으로 위젯을 다시 초기화해야합니다. 정말 최고는 아니야.

- (void)didLayoutSubviews { 
    [super didLayoutSubviews]; 

    self.myWidget = [self.myWidget initWithFrame: self.myWidgetContainer.frame]; 
} 

2)보기가 설정되면 위젯 만 초기화하십시오.

- (void)didLayoutSubviews { 
    [super didLayoutSubviews]; 

    if (!self.myWidget) {  
     self.myWidget = [self.myWidget initWithFrame: self.myWidgetContainer.frame]; 
     [self.myWidgetContainer addSubview:self.myWidget]; 
    } 
} 
+0

음, 유일한 해결책 인 것 같습니다. 내 코드를 수정 한 후에 작동한다고 생각합니다. 귀하의 답변에 감사드립니다. – Tepmnthar

관련 문제