2013-05-27 4 views
1

Autolayout (새 앱에서 처음 사용)으로 어려움을 겪고 있습니다.AutoLayout Problems

다음과 같은 상황 :

  • 스토리 보드
  • 아이 패드
  • 자동 레이아웃 내가 프로그래밍 사용자 선택에 따라 8 개 버튼 레이아웃을 다시 할 필요가 하나의 팝 오버에서

수 있었다. 이것은 버튼이 180 ° 회전 되어야만하는 순간까지 작동합니다 (앱 기능인 거꾸로 보임).

회전 코드를 추가하면 중계가 더 이상 작동하지 않습니다. 왜 단추의 위치를 ​​변경할 수 있는지 이해하지 못합니다 (사례 2처럼). 그러나 회전 할 때 더 이상 작동하지 않습니다.

사례 1 :

버튼 0 | 버튼 1 | 버튼 2 | 버튼 3
버튼 4 | 버튼 5 | 버튼 6 | 버튼 7

사례 2 :

버튼 7 | 버튼 6 | 버튼 5 | 버튼 4
버튼 3 | 버튼 2 | 버튼 1 | 버튼 1
(모든 버튼이 180 ° 회전 됨, 즉 거꾸로 뒤집혀 있음)

일단 AutoLayout이 꺼지면 매력처럼 작동합니다. 문제는 AutoLayout을 끄 자마자 나머지 앱이 완전히 엉망이됩니다.

누군가가 나를이 문제를 이해하도록 도울 수 있다면 좋을 것입니다.

코드는 프레임이 버튼은 모든 NSLog 출력 올바른지 좌표 viewDidAppear

for (UIButton *button in self.allButtons) { 

    if (button.tag == i) { 

     button.transform = CGAffineTransformMakeRotation(M_PI); 

     button.frame = CGRectMake((300 - (100 * currentButtonPosition)) + offsetWidthButton, offsetHeightButton, 100, 100); 
     NSLog(@"Button Tag Nr: %d\nFrame:\nX=%f\nY=%f\nW=%f\nH=%f",button.tag, button.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame.size.height); 

        } 

       } 

이다. 어떻게 든 button.transform 나사는 .frame = CGRectMake 부분까지 나사를 맞 춥니 다. 그러나 왜 나는 이해하지 못하고 신비한 autoLayout을 계속 연구해야 할 곳에 도움이나 안내를 기다리고 있습니다.

는 설명이

감사합니다 :-) 이해할 수있는 희망과 좋은 하루 되세요 로니

+0

'viewDidAppear'에서 그 코드를 사용하지 않으면 어떻게 될까요? 왜 네가 그것을 필요로하는지 나는 모르겠다. – trojanfoe

+0

사용자가 설정에서 선택한 항목에 따라 - 예를 들어 5 개의 버튼과 다른 주문이 있습니다. 그래서 프로그래밍 방식으로 프로그램을 재정렬해야합니다. 예를 들면 BUTTON 1 | 버튼 3 | 버튼 5 | 버튼 6 | BUTTON 7 –

답변

1

버튼의 프레임을 설정하지 않는, 당신은 제약 조건을 변경해야 자동 레이아웃 사용하는 경우. 여기 8. Autolayout and Navigation (January 31, 2013)

  • 인터페이스 빌더에서 자동 레이아웃 사용에 대한 good tutorial있어 :

    • 이 스탠포드에서 자동 레이아웃에 큰 스타터입니다.
    • 다음은 프로그래밍 방식으로 제약 조건을 추가하는 방법을 보여주는 몇 가지 질문입니다. here, herehere.
  • +0

    방향에 감사드립니다. 현재의 어플리케이션에서 필자는 Autolayout이 "정상에 오르고있다"고 생각하고 자동 레이아웃을 해제하고 전원을 끈 후에 잘못 된 모든 것을 다시 라우팅했습니다. (늦은 답장을 보내 주셔서 죄송합니다. 인터넷이 없습니다.) –

    +0

    @ MR-Apps 문제가 없으니 기쁘게 생각합니다. Autolayout은 약간 혼란 스럽습니다! –

    1

    마지막 Xcode 버전에서 버그가 발생하거나 예기치 않은 동작이 약간 개선되었지만 여전히 혼란 스럽습니다. 예를 들어, 하나의 XIB에서 AutoLayout을 개별적으로 끌 수는 없지만, 하나의 XIB에서 변경 될 때 다른 사람의 확인란은 변경되지 않습니다.

    자동 레이아웃을 전환하기 전에, 모든 뷰에서 제약 조건에 따라 프레임을 설정, 응용 프로그램의 모든 뷰에있는 모든 제약 조건을 삭제 한 다음 자동 레이아웃을 해제 : 당신이 원하는 무엇

    은 다음과 같다.

    이것은 프로그램 적으로가 아니라 IB에서 제약 조건을 설정 한 것이 훨씬 어렵지 않습니다.

    자동 레이아웃은 안타깝게도 여전히 예상되는 기능 뒤에 있으며, 자동으로 제약 조건을 설정할 때 내재 된 위치를 정의하고 인식하는 데에는 부족합니다. 개선을위한 광대 한 영역입니다.