본문 바로가기

iPhone

코드로 오토레이아웃 제어하기

코드로 오토 레이아웃을 추가 해 주어야 할 경우에는

+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

를 추가하여 사용 해 주면 된다.

view1과 view2는 서로 제약조건으로 영향을 주는 뷰 이며 (NSLayoutAttribute )attr1, attr2는 레이아웃 속성이다. 

여기서 사용되는 NSLayoutAttribute 경우는 아래와 같은 속성을 사용 할 수 있다.

relation 은 NSLayoutAttribute의 관계를 의미하며 아래와 같은 속성을 사용 할 수 있다.

multiplier 과 constant는 각각 크기의비율과 해당 크기값을 나타낸다.

이를 nib또는 스토리보드상에서 확인하면 아래와 같다.

다음은 해당 코드의 사용 예시이다. ( UiView안에 UITextfield가 있는 경우의 예시)

//높이 지정 ( 뷰의 높이보다 12가 작도록 )

NSLayoutConstraint *textfieldConstraintHeight = [NSLayoutConstraint constraintWithItem:self.textfield attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.frame.size.height -12];

// 넓이지정 ( 뷰의 너비가 값도록 )

 NSLayoutConstraint *textfieldConstraintWidth = [NSLayoutConstraint constraintWithItem:self.textfield attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.frame.size.width];

// textfield에 넓이와 높이를 지정

[self.textfield addConstraints:[NSArray arrayWithObjects:textfieldConstraintHeight, textfieldConstraintWidth,nil]];


// 높이 중앙정렬

 NSLayoutConstraint *textfieldConstraintCenterY = [NSLayoutConstraint constraintWithItem:self.textfield attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.f constant:0];

    

 // self.textfield self 왼쪽에 거리를 0으로 지정함.

 NSLayoutConstraint *textfieldViewConstraintLeadingSpace = [NSLayoutConstraint constraintWithItem:self.textfield attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0];

// self self.textfield 오른쪽에 거리를 0으로 지정함.

 NSLayoutConstraint  *textfieldViewConstraintTrailingSpace = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.textfield attribute:NSLayoutAttributeTrailing multiplier:1.f constant:0];

// 뷰에 적용  

  [self addConstraints:[NSArray arrayWithObjects:textfieldViewConstraintLeadingSpace, textfieldViewConstraintTrailingSpace, textfieldConstraintCenterY, nil]];


 여기서는 넓이값을 넣게되면 제약조건상 충돌이 일어나기 때문에 실제 사용 시 넓이값은 빼 주어야 한다. 

( 넓이 지정이지만 textfield의 크기는 view의 크기만큼 늘어나도록 되어있어 충돌)

위의 코드는 아래와 같이 적용된 코드이다.