2013-06-25 6 views
2

다음은 스프링 및 스트럿과 함께 여러 NSSplitViewDelegate 크기 조정 및 제한 방법과 함께 구현되었으며 원하는대로 작동합니다. 이제는 setFrame 메시지와 NSSplitViewDelegate 메서드를 모두 autolayout 제약으로 바꾸면 동일한 시나리오에서 autolayout을 채택하려고합니다.NSSplitView에서 Autolayout을 사용하여 예기치 않은 동작이 발생했습니다.

내 메인 창의보기에는 OuterSplitter의 수퍼 뷰에 대해 0으로 설정된 상/하/좌/우 앞과 뒤 공간 제약 조건이있는 세로 분할보기 (나는 OuterSplitter라고 부름)가 있습니다.

OuterSplitter의 오른쪽 창에는 InnerSplitter의 상단, 하단, 왼쪽 및 오른쪽 맨 앞과 뒤쪽 공간 제약 조건이 0으로 설정된 superview의 또 다른 세로 분할보기 (InnerSplitter 호출)가 있습니다. (예 : OuterSplitter의 오른쪽 창).

OuterSplitter의 왼쪽 창에 대한 공칭 최소 너비 제약 조건과 InnerSplitter의 왼쪽 및 오른쪽 창 둘 다에 대한 공칭 최소 너비 제약 조건을 설정했습니다.

주 창 크기를 조정할 때 최소 너비 제약 조건 중 하나가 적용되지 않는 한 원하는 동작으로 InnerSplitter의 왼쪽 창에 확장 및 축소의 전체 또는 대부분이 적용됩니다. 따라서 OuterSplitter의 왼쪽 창에 대한 우선 순위는 260 (가장 높음)으로, 오른쪽 창의 250으로 분할보기를 설정했습니다. 또한 InnerSplitter의 왼쪽 창에 대한 보류 우선 순위는 245 (가장 낮음)이고 오른쪽 창의 255입니다.

저는 WWDC 2012에서 232 세션에 대한 비디오를 보았으며 올바른 방향으로 가고 있다고 생각했습니다. 내 autolayout 제약 조건은 대부분 원하는대로 작동하지만 Spring 및 Struts 버전에서는 발생하지 않는 매우 이상한 동작이 있습니다.

InnerSplitter의 분할 막대가 가장 오른쪽으로가는 경우 (InnerSplitter 오른쪽 창은 최소 크기 임) 외부 스플리터 분할 막대가 최대한 멀리 왼쪽으로 이동하지 않으면 드래그하려고 할 때 InnerSplitter의 스플리터 바가 오른쪽으로 멀어지면 예기치 않게 OuterSplitter의 분할 막대가 왼쪽으로 이동하여 InnerSplitter의 왼쪽 패널이 커지고 OuterSplitter의 왼쪽 창이 축소됩니다. 내 기대는 그 경우 크기 조정이 일어나지 않아야한다는 것입니다.

오른쪽에 고정되어있는 InnerSplitter의 분할 막대를 당길 때 OuterSplitter의 분할 막대가 움직이지 않도록 할 수 있습니까? 그렇다면 어떤 제약 조건을 추가해야합니까? 또는 NSSplitViewDelegate 방법 중 일부가 여전히 필요합니까? 감사.

현재, Xcode 4.6.3을 사용하고 있으며 OSX 10.8을 타겟팅하고 있습니다.

+0

다음은 베어 본 데모입니다. https : // github.com/Whiffer/Test-Autolayout –

답변

0

나는 똑같은 문제가 있었고 각 분할 뷰 창 내에서 NSViewController를 사용하여 분할 뷰에 임베드 된 분할 뷰를 직접 가지지 않았습니다. 더 많은 코드와 더 복잡한 것이지만 작동하는 것 같습니다.

분할 된보기가 분할 된보기에 포함되어있는 경우 해결책을 찾지 못했지만 누구나 대답이 있으면 관심을 보일 것입니다.

+0

마침내 포기하고 외부 분할 뷰에 세 번째 창을 추가하고 내부 분할 뷰를 제거했습니다. 원하는 UI 동작을 모두 수행 할 수는 없었지만 적어도 이상한 점이없이 작동합니다. –

0

이 문제를 해결하려면 NSSplitView에서 -mouseDown:에 명시적인 너비 제약 조건을 추가 한 다음 super를 호출 한 다음 바로 제거하십시오.


또한 10.11 베타!에서 수정 된 것 같습니다.

관련 문제