2012-08-30 2 views
8

필자는보기 컨트롤러의보기를 포함하는 자동 레이아웃 기능을 가진 펜촉이 있으며, 추가 할 수있는 자리 표시 자보기가있는 창이 별도로 있습니다. 자리 표시 자에는 윈도우의 수퍼 뷰 및 다른보기와 관련된 제약 조건이 있으며 내보기 컨트롤러가 관련되기 전에 원하는 방식으로 창 크기를 조정하는 자리 표시자가 있습니다. 나중에 펜촉을로드하고 최상위 뷰를 자리 표시 자의 하위보기로 추가합니다. 또한 수동으로 자리 표시 자의 가장자리에 정렬되도록 제약 조건을 만듭니다.Autolayout이 내 창 크기를 조정하고 있습니다.

모두 좋아요.이 패턴은 내 앱에서 여러 경우에 사용되지만 일부 경우에는보기를 추가 한 후 내 창 크기가 조정됩니다. 현재 창 크기로 확대되는보기가 아닌 추가 된보기의 최소 크기로 축소됩니다.

지금까지 내가 이것을 막을 수있는 유일한 방법은보기를 추가하고 제약 조건을 만들 때보기의 프레임을 설정하여 개체 틀과 창의 현재 상태에 대한 초기 크기를 지정하는 것입니다. 시간이 걸리는 것은 좋지만 각 가장자리를 자리 표시 자 슈퍼 뷰에 정렬하는 것보다 더 복잡한 제한 조건을 정의 할 수 있기를 원합니다. 나는 각각의 경우에 대해 프레임 산술을 코딩하고 싶지 않다.

사람은 무슨 일이 일어나고 있는지 알고 있나요? 윈도우가 이미 내 자리 표시 자의 크기를 지정하는 것이지, 다른 방법이 아닌 경우, 현재의 윈도우 크기를 계속 유지하기 위해 서브 뷰를 추가 할 때 무엇을해야합니까?

Xcode의 IB 창에있는 팝업 메뉴는 서브 뷰와 수퍼 뷰에 영향을 미치는 제약에 관한 것으로 보입니다 (이전의 모든 닙에 설정 됨).이 기능과 관련하여 어떤 일이 벌어지고 있습니까? 나는 아직 그것에 관해서 다른 것을 발견하지 못했다.

+0

프로그래밍 방식으로 설정할 수 있습니다 당신은 사용자 정의보기 (자리)에 너비 제약 조건을 설정할 수 없습니다? – codingFriend1

+1

더 명확하게 작성하려면 내 게시물을 편집했습니다. 내 자리 표시 자에는 이미 창 크기를 조정할 때 올바른 동작을 제공하는 제약이 있습니다. 하위 뷰를 추가 할 때 고정 크기 제약 조건을 추가하면이를 줄일 수 있습니다. –

+0

제약 조건이 맞으면 창 크기 조정이 작동합니다. –

답변

9

압축 저항 우선 순위를 NSLayoutPriorityWindowSizeStayPut (500)보다 작게 설정하려고합니다. 즉, 창의 크기가보기의 크기보다 우선합니다.

IB 크기 속성에서 설정할 수 있습니다.

Compression resistance priority

아니면 -[NSView setContentCompressionResistancePriority:forOrientation:]

+0

이것이 우선적 인 문제라고 생각됩니다. 그러나이 게시 메시지가 표시된 경우 창은 추가 된 하위 뷰에 필요한 것보다 큽니다. 하위 뷰는 압축되지 않았지만 대신 확장되었습니다 (문제는 확장되지 않았지만 창은 축소되었습니다). 이것이 압축 저항의 우선 순위가 적용되지 않는다는 것을 의미합니까? Content Hugging 우선 순위도 <500으로 설정해야합니까, 아니면 혼란 스럽습니까? (나는 거의 1 년 동안 자동 레이아웃으로 작업 해왔고 우선 순위의 2 가지 세트의 목적을 시각화하는 것이 여전히 어렵다.) –

+0

예, 정확합니다. 콘텐츠 포옹 우선 순위는 <500이어야합니다.압축 저항 우선 순위는 공간을 줄이면 어느보기가 축소되어야 하는지를 결정하고 공간을 늘릴 때 내용을 포옹 할 때 사용됩니다. 창 체재가 500의 우선권을 두는 상태에서, 무엇이든 <500는 창 크기가 이기고,> 500는 전망 승리를 의미합니다 – iain