iOS6부터 새로 추가된 AutoLayout 기능은 너무 편리하다. (사실... iOS6에서는 인터페이스가 엉망이라 불편했는데 iOS7부터는 많이 개선되었다.)


본론으로 들어가서, 스토리보드에AutoLayout을 적용하면 동적으로 프레임 좌표변경이 불가능하다.

정확히 말하면 분명 메모리상에서는 이미 바뀌어 있지만 화면에 표시될땐 변경된 좌표로 표시되지 않는 현상이 발생한다.

그 뿐만아니라 layer에 회전을 시키는 것도 제대로 동작하지 않는다.


지금까지 해결방법으로 스토리보드에서 AutoLayout를 해제하여 해결해왔는데 (정확히 말하면 AutoLayout사용을 포기한거임) 이제서야 제대로 된 해결방법을 알아냈다.



그 방법이란 좌표를 변경할 뷰를 일단 한번 띄어냈다가 다시붙이는 방법이다. 그렇게 하면 그부분만 AutoLayout의 쓸데없는 방해를 피할 수 있다.


예를들어..


for (UIView *v in moveView.subviews) {

        

        if ([v isKindOfClass:[UIView class]] == YES) {

            //변경을 원하지 않으면 패스

            continue;

        }

        

        [v removeFromSuperview];

        

        //프레임을 변경

        v.frame = CGRectMake(0, 0, 100, 200);

        

        [self.view addSubview:v];

        

    }



대충 이런식의 코딩이 가능하다.

참고로 뷰를 띄었다가 붙였을경우 IBOutlet에 연결된 커넥션이 무효화될까 걱정했었는데 무사히 동작한다.


혹시 모를 AutoLayout 때문에 고생하시는 개발자분들은 참고하시길.


2013.03.22 추가내용.

AutoLayout적용한 컨트롤러에서 UIScollView(스크롤뷰)에서 컨텐츠사이즈가 적용안되는문제가 발생하는데 아래와 같은 방법으로 해결할 수있다.


- (void)viewDidLayoutSubviews {

    

    [super viewDidLayoutSubviews];

    

    // 스코롤 컨텐츠사이즈 변경

    [scView setContentSize:CGSizeMake((_rView.frame.size.width + _tView.frame.size.width),

                                      [UIScreen mainScreen].bounds.size.height)];

    

    [self.view layoutSubviews]; //이부분이 중요

}



Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요