* autolayout 의 제약조건을 동적으로 생성하는 방법.
  이거 알아내는데 2일 소비함. ㅠㅠ

* scrollview 에 이미지뷰를 동적으로 추가하고
  scrollview 의 높이가 변경될때, 그 안의 이미지뷰들도 높이가 자동으로 변하도록 함
  이미지뷰의 갯수는 3개로 정함.

* VFL : Visual Format Language. iOS 제약조건을 만들때 사용되는 언어
  V : Vertical. 상하. 높이
  H : Horizontal. 좌우. 넓이
  | : superview 를 뜻함
  V:|-(0)-[뷰1]-(10)-|   슈퍼뷰와 뷰1의 위쪽 공간은 0 으로 함. 뷰1과 슈퍼뷰의 아래쪽 공간은 10 으로 함.
  H:|-(100)-[뷰1]-(200)-|   슈퍼뷰와 뷰1의 왼쪽은 100 으로 함. 뷰1과 슈퍼뷰의 오른쪽은 200 으로 함.
  V:[뷰1(==scrollview)]   뷰1의 높이는 스크롤뷰의 높이와 같게 함.
  H:[뷰1(50)]   뷰1의 넓이는 50 으로 함.


  float iScrollViewContentW = FRAME_W(svHeader)*3;

  svHeader.contentSize = CGSizeMake(iScrollViewContentW, FRAME_H(svHeader));


  float iX = 0.0;

  for(int i=0; i<4; i++)

  {

    UIImageView* iv = [[UIImageView alloc] init];

    iv.image = [UIImage imageNamed:[NSString stringWithFormat:@"alarm_m1_%d.png", i+1]];

    iv.contentMode = UIViewContentModeScaleAspectFit;

    iv.translatesAutoresizingMaskIntoConstraints = NO;

    [svHeader addSubview:iv];


    NSString* sConstraintName = [NSString stringWithFormat:@"iv_%d", i];

    NSDictionary* viewsDictionary = @{sConstraintName:iv, @"scrollview":svHeader};

    

    NSString* sConstraintPosV = [NSString stringWithFormat:@"V:|-(0)-[%@]-(0)-|", sConstraintName];

    NSString* sConstraintPosH = [NSString stringWithFormat:@"H:|-(%f)-[%@]-(%f)-|", iX, sConstraintName, iScrollViewContentW-iX-FRAME_W(svHeader)];

    NSString* sConstraintSizeV = [NSString stringWithFormat:@"V:[%@(==scrollview)]", sConstraintName];

    NSString* sConstraintSizeH = [NSString stringWithFormat:@"H:[%@(%f)]", sConstraintName, FRAME_W(svHeader)];

    

    NSArray* constraintPosV = [NSLayoutConstraint constraintsWithVisualFormat:sConstraintPosV

                                                                        options:0

                                                                        metrics:nil

                                                                          views:viewsDictionary];

    NSArray* constraintPosH = [NSLayoutConstraint constraintsWithVisualFormat:sConstraintPosH

                                                                        options:0

                                                                        metrics:nil

                                                                          views:viewsDictionary];

    NSArray* constraintSizeH = [NSLayoutConstraint constraintsWithVisualFormat:sConstraintSizeH

                                                                        options:0

                                                                        metrics:nil

                                                                          views:viewsDictionary];

    NSArray* constraintSizeV = [NSLayoutConstraint constraintsWithVisualFormat:sConstraintSizeV

                                                                       options:0

                                                                       metrics:nil

                                                                         views:viewsDictionary];


    [svHeader addConstraints:constraintPosH]; // 좌우 제약조건 생성

    [svHeader addConstraints:constraintPosV]; // 상하 제약조건 생성

    [svHeader addConstraints:constraintSizeH]; // 넓이 제약조건 생성

    [svHeader addConstraints:constraintSizeV]; // 높이 제약조건 생성


    

    iX += FRAME_W(svHeader);

  }


* 참고자료
http://we.weirdmeetup.com/nslayoutconstraint/



반응형

'iOS 초보' 카테고리의 다른 글

autolayout 제약조건 애니메이션  (0) 2015.03.18
맥, ios, thrift  (0) 2015.03.12
iOS xcode6 pch 파일추가  (0) 2015.02.12
NSUserDefaults 초기화  (0) 2014.10.20
xcode, git  (0) 2014.07.02
Posted by 돌비
,