2014-02-11 2 views
0

아래의 프레임 세트가없는 ClassA가 처음에 초기화되는 클래스가 있습니다. ClassA의 인스턴스는 autolayout으로 설정되지 않습니다. 프레임은 나중에 수동으로 설정됩니다. 그러나 ClassA의 하위보기가 자동으로 배치되기를 원합니다. 문제는 내가 이것을 할 올바른 방법을 찾을 수 없다는 것입니다. layoutSubview가 호출되기 전에 (프레임이 설정되기 전에) 제약 조건을 설정하려고하면 제약 조건이 유효성을 검사하지 않습니다. layoutSubviews에서 Super를 호출 한 후 설정을 시도하면iOS - layoutSubviews의 서브 뷰에서 Autolayout을 설정하려고 시도합니다.

-layoutSubviews를 실행 한 후에도 자동 레이아웃이 필요합니다. GHTExerciseSetView의 -layoutSubviews 구현은 super를 호출해야합니다.

슈퍼 (어쨌든 올바르게 보이지 않는) 호출 후에 제약 조건을 설정하려고하면 처음에는 작동하는 것처럼 보이지만 ClassA 인스턴스를 추가하고 다시 그리기 시작하면 더 많은 문제가 발생합니다. 제약 조건이 유효하지 않습니다. 주요 질문은,이 방법으로 뷰를 배치하는 적절한 방법입니다. 감사.

@interface ClassA() 

@property (nonatomic, strong) SubView1 *sub1; 
@property (nonatomic, strong) SubView2 *sub2; 


@end 

@implementation ClassA 

//this is called initially with no frame 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     sub1 = [[SubView1 alloc] init]; 
     sub1.translatesAutoresizingMaskIntoConstraints = NO; 
     [self addSubView:sub1]; 

     //Same for sub2 

} 
return self; 
} 

- (void)layoutSubViews { 
    [super layoutSubViews]; 
} 

- (void)updateConstraints { 
    [super updateConstraints]; 

    //sub1 and sub2 constraints 
} 
+0

제한된 하위보기로보기가 어떻게 표시되는지 보여 줄 수 있습니까? 즉 하위 뷰를 배치하는 방법 등 ... – Fogmeister

답변

0

제한 조건이 올바르게 구성되었다고 가정합니다.

initWithFrame:에보기 계층 구조를 만든 후에 updateConstraintsIfNeededself으로 보내보십시오. 내 자신의 응용 프로그램 에서이 일을 몇 가지 문제를 해결하는 것 같았다.

또한 updateConstraints은 여러 번 호출 될 수 있으므로 동일한 제약 조건을 반복해서 설치하지 않는지 확인하십시오.

관련 문제