부모 컨테이너의 명시 적 차원에만 순종하기 위해 Flex에서 컨테이너를 크기로 만드는 가장 좋은 방법

StackOverflow https://stackoverflow.com/questions/245292

  •  05-07-2019
  •  | 
  •  

문제

나는 거의 1 년 동안 Flex를 사용 하여이 문제를 해결해 왔으며, 매번 당분간 작동하는 빠른 해킹 솔루션을 작업 할 때마다 매번 작동합니다. 누군가가 더 나은 아이디어를 가지고 있는지보고 싶습니다.

문제의 조건은 다음과 같습니다.

|------Container  ------------|
|  explicitHeight:  400 (or whatever)
|                             |
|  |-------- VBox  -------|   |
|  |  percentHeight: 100  |   | 
|  |                      |   |
|  |  |-Repeater------|   |   |
|  |  | Potentially   |   |   |
|  |  | a lot of stuff.   |   |
|--|--|---------------|---|---|

문제는 내가 원하는 것과는 달리 Vbox는 부모의 명시 적 높이를 고수하고 스크롤 막대를 만드는 대신 항상 내부의 내용을 수용하도록 확장한다는 것입니다.

내 솔루션은 부모를 참조하여 하드 코드에 관한 것이 었습니다 (또는 디스플레이 목록 위로 올라가서 퍼센트가 아닌 명시 적으로 설정된 값을 찾아야합니다).

나는 이것을 유틸리티 클래스에서 사용하는 것을 고려했습니다.

public static function getFirstExplicitHeightInDisplayList(comp:UIComponent):Number{
    if (!isNaN(comp.explicitHeight)) return comp.explicitHeight;
    if (comp.parent is UIComponent) return    
         getFirstExplicitHeightInDisplayList(UIComponent(comp.parent));
    else return 0;
}

더 나은 방법이 있다고 말 해주세요.

도움이 되었습니까?

해결책

설명서대로 vbox의 "autolayout"매개 변수를 사용해야합니다.

"기본적으로 Vbox 컨테이너의 크기는 이미지를 원래 크기로 유지하기에 충분히 큽니다. 레이아웃 업데이트를 비활성화하고 줌 효과를 사용하여 이미지를 확대하거나 이미지를 재배치하기 위해 이동 효과를 사용하여 이미지를 재배치합니다. Vbox 컨테이너의 경계를 지나서 연장 될 수 있습니다.

Autolayout 속성을 False로 설정하므로 Vbox 컨테이너가 이미지 크기가 크게 높아지지 않습니다. 이미지가 크기로 자라서 Vbox 컨테이너의 경계를 넘어 확장되면 컨테이너는 스크롤 막대를 추가하고 이미지를 경계로 클립합니다.

나는 그것이 당신을 도울 수 있기를 바랍니다.

다른 팁

MinHeight = 0을 설정하면 필요한 전부입니다.

이것은 vbox에 크기를 조정할 때 어린이의 측정을 무시하고 자신의/부모의 제약 조건에 따라 키를 계산하도록 지시합니다. 평소와 같이 다른 모든 것을 설정하고 스크롤링하면 다른 모든 것이 완벽하게 작동합니다.

1 년 전에 이것에 며칠을 보냈습니다. 직관적이지 않으며 아마도 재산을 더 좋게 지명했을 수도 있습니다. 이게 당신에게 시간을 절약하기를 바랍니다 ...

autolayout = false 크기 변화. 그러나 어린이를 추가하거나 제거하면 레이아웃이 어쨌든 재실행됩니다.

MinHeight = 0을 설정하면 실제로 vbox의 (외부) 크기를 어린이 크기와 수에서 완전히 연결 해제합니다. 이것이 제가 원하는 것입니다.

Flex 소스 코드를 통해 Pawing MinHeight = 0을 설정하는 메커니즘이 내가 원하는 것처럼 작동하는 메커니즘을 보지 못했기 때문에 그것을 발견하기 위해 Yarin에게 경의를 표합니다. 감사!

컨테이너의 속성을 설정하십시오.

clipContent = true;
verticalScrollPolicy = "off"

그런 다음 vbox가있을 때 자동으로 클립해야합니다 percentHeight = 100;

Flex 3에서 나를 위해 일합니다.

정말 화려하게 되려면 객체에서 스크롤리어를 설정할 수 있습니다.

scrollRect = new Rectangle(x, y, w, h);

해야 할 일에 따라

사실, Yarin Kessler는 우리에게 유일한 정답을 가져 왔습니다 (불행히도, 나는 그 게시물을 언급 할 권리가 없기 때문에 내가 여기서하고있는 이유입니다).

Hbox 크기가 백분율 값을 기준으로하면 컨테이너 만 크기에 영향을 미치기를 바라고 있습니다. 그것은 잘못입니다. 다른 규칙이 있습니다. 더 강한 규칙이 있습니다. 컨테이너 (Hbox가있는)의 크기는 최소 크기를 가지고 있으며, 이는 자체 자식 구성 요소의 기본/명시 적 크기를 추가하는 것입니다.

따라서 백분율 값으로 인해 최소 크기보다 값이 작아지면 최소 크기가 승리하고 Hbox에 적용됩니다. Hbox가 모든 어린이를 표시하기 때문에 스크롤 바가 필요하지 않습니다.

그래서 사용 :

minHeight = 0;
minWidth = 0;

Hbox에 어린이 기본 크기 대신 최소 크기가 0이라고 말하는 것과 같습니다. 당신은 그것을 재정의하고 있으며, 그렇게하는 방식으로 최소 크기는 백분율 값보다 작고 전투를 잃습니다.

Adobe 문서에서 찾은 유일한 문구는 이것을 설명합니다.

백분율 기반 컨테이너 크기는 권고입니다. Flex는 컨테이너를 최소 크기로 어린이를 맞출 수있을 정도로 크게 만듭니다.

내가 분명하게 만들었 으면 좋겠어

(내 잘못된 영어 문장을 자유롭게 수정하십시오 ...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top