2014-10-07 4 views
0

저는이 이상한 자동 레이아웃 문제에 대한 해결책을 찾고있었습니다. 5 페이지로 페이징 UIScrollView를 설정하려고합니다. 각 페이지에는 고유 한 UIView 인 container이 있습니다. 나의 현재 설정은 다음과 같습니다UIScrollView가없는 Autolayout

UIView *container = [[UIView alloc] init]; 
container.translatesAutoresizingMaskIntoConstraints = NO; 
NSLayoutConstraint *width =[NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeWidth 
    relatedBy:0 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeWidth 
    multiplier:1.0 
    constant:0]; 
NSLayoutConstraint *height =[NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeHeight 
    relatedBy:0 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeHeight 
    multiplier:1.0 
    constant:0]; 
NSLayoutConstraint *top = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeTop 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeTop 
    multiplier:1.0f 
    constant:0.f]; 
NSLayoutConstraint *left = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeLeft 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeLeft 
    multiplier:index 
    constant:self.headlineView.frame.size.width]; 
[self.headlineView addSubview:container]; 
[self.headlineView addConstraints:@[width, height, top, left]]; 

상황 :이 내에서 호출되는 대한 루프 5 배, 변수 index 증가 할 때마다 실행됩니다. 그게 제대로 작동하고있어.

마지막 제약 조건에 따라 원하는 효과를 얻을 수 있다고 생각했습니다. 각 시간 (0-4)의 배율은 스크롤 뷰 프레임의 한 단위만큼 왼쪽 가장자리를 이동시킵니다.

실제 결과는 매우 이상합니다. 5 개의보기 모두는 서로 겹치는 스크롤보기의 두 번째 페이지에 있습니다.

곱셈기와 상수 매개 변수는 사용하지 않는다고 생각합니까? 나는 무엇을 여기에서 엉망 이냐?

답변

0

가장 좋은 것은 뷰가 self.headlineView이라는 프레임을 그려 내지 않았다는 것입니다. 당신이 제약 조건을 설정하기 전에 당신이 NSLog(CGStringFromRect(self.headlineView.frame));를 넣으면 내가있을거야 셨을 텐데요 0

시도 통화 :

[view setNeedsLayout]; 
[view layoufIfNeeded]; 

... 당신이 제약 조건을 설정하거나 내부 제약 메소드를 호출 시도하기 전에 대신에 (viewDidLoad?으로 추정).

+0

프레임이 0이 아닙니다. 너비와 높이 멤버가 이미 설정되어 있습니다. 제약 조건 이전에이 두 메서드를 호출하면 아무 일도하지 않습니다. – erdekhayser

+0

Blat! 다시 도면 보드 – brandonscript

+0

문제는 '왼쪽'제약이 내가 생각하는대로하지 않는 것 같습니다. 다른 제약 조건은 제대로 작동하지만이 마지막 문제가 문제인 것처럼 보입니다. – erdekhayser

0

분명히 승수와 상수 매개 변수는 내가 생각한 것 (또는 의도 한 것)을 수행하지 않습니다.

원본 레이아웃은 배율로 index에 입력하고 뷰 폭은 상수로 넣습니다. 그러나 상수 매개 변수에 대해 모두 계산해야합니다.

CGFloat offset = index * self.headlineView.frame.size.width; 
NSLayoutConstraint *left = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeLeft 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeLeft 
    multiplier:1.0f 
    constant:offset];