2011-01-19 9 views
0

일부 아이를 추가 한 후 구성 요소의 실제 높이를 얻고 싶습니다.플렉스 3 - 구성 요소의 실제 크기를 얻으십시오

디버그 모드에서 변수 탭을 검사 할 때 $ height (올바른 값 : 138 포함) 및 height/_height (잘못된 값 : 10)의 두 가지 높이 변수가 표시됩니다.

디스플레이가 업데이트되지 않아서 component.height를 사용하여 정확한 높이를 얻지 못했지만 $ height에 값을 어떻게 얻을 수 있습니까? 당신이 제공 할 수있는 어떤 도움

감사합니다 =)

감사합니다, BS_C3


@Flextras 다시

, 답변 주셔서 감사 많은! 그게 정말 상세했습니다 =)

Measuredheight는 내가 찾고자하는 값을 제공하지 않으며 explicitHeight에는 값이 없습니다 (NaN). 지금은 테스트 할 수 없습니다, 그래서 나는

가 여기에 내가 가지고있는 구조의 ... unscaledHeight를 위해 말할 수 없다 :
MainContainer - Canvas 
    BOX1 - Canvas (height = 100) 
    BOX2 - Canvas (height = 100) 
    VariableBox - Canvas (height: depends on the height of it's variable number of children) 
    Text - TextArea 

내가 텍스트를 배치하기 위해 VariableBox의 높이가 필요합니다.

기능은 다음과 같습니다

updateDisplay(){ 
    for(i;i<list.length;i++){ 
     VariableBox.addChild(new HBox); 
    } 
    // reposition Text depending on VariableBox's height 
} 

내가 코드를 포기하지 않을거야 알고 있지만 나는> _ 지금 내 작업 컴퓨터에이 도움이 <

희망이 아니에요!

답변

0

최종 솔루션 :

나는 마침내 내가 동적으로 일부 아이들을 추가 하였다 부모 컨테이너를 가지고 일부 사치스러운 물건을하지 않고 나를 만족있어 몇 가지 해결 방법 ...

을 발견하고는 얻지 못한을 높이입니다 업데이트되지 않습니다. 내가 겪고있는 문제는 measuredHeight, explicitHeight, height, 또는 parent 컨테이너의 unscaledHeight도 필자가 원하는 높이를 제공하지 못했다는 것입니다.

그래서 각 자식의 creationComplete에 수신기를 추가했습니다. 생성 완료 이벤트가 시작되면 모든 하위 컨트롤이 고려됩니다. 이 순간, 부모 컨테이너의 measuredHeight가 예상 값으로 설정됩니다. 몇 가지 유용한 정보를 제공하고있다 다시 Flextras에

parentContainer.height = parentContainer.measuredHeight 

감사합니다 =)

안부를 : 그래서 난 그냥 설정하는 데 필요한.

5

짧은 대답 : getMeasuredOrExplicitWidth()getMeasuredOrExplicitHeight() 방법을 사용하십시오.

대부분의 경우 height 또는 width은 해당 값과 동일한 값을 반환합니다.

길게 대답 : 어떤 구성 요소를 사용하고 있습니까? Flex로 태그를 지정 했으므로 UIComponent를 확장하는 Flex 시각적 구성 요소라고 가정합니다.

볼 높이 값이 얼마되지 않지만 자녀의 크기를 조정하는 것은 항상 부모의 책임입니다. 구성 요소에 하위 항목을 추가해도 반드시 높이 또는 너비가 변경되지는 않습니다. 자녀를 추가 할 구성 요소가 자녀를 고려하는지 여부에 따라 다릅니다.

먼저 measuredHeightmeasuredWidth을 살펴보십시오. 이 값은 측정 방법을 사용하여 계산 된 구성 요소의 기본 크기 값입니다. HBox 또는 VBox와 같은 일부 구성 요소는 자동으로 자녀를 "인식"하고 크기를 계산할 때이를 사용합니다. UIComponent와 같은 다른 구성 요소는 measuredHeight 또는 measuredWidth를 설정할 때 하위를 고려하지 않습니다.

둘째, explicitHeight 및 explicitWidth를 살펴볼 수 있습니다. 너비 또는 너비를 설정하면이 값이 설정됩니다. setActualSize() 메서드를 사용하면 이러한 값이 설정되지 않는다고 생각합니다.후드 아래에는 약간의 마술이있어서 explicitHeightexplicitWidth은 높이와 너비 뒤에 가려져 있습니다. 그들은 종종 동일하지만 항상 그런 것은 아닙니다.

스케일링을 처리하지 않지만 구성 요소의 크기와 너비가 필요하지 않은 경우 구성 요소의 보호 된 속성은 unscaledWidthunscaledHeight입니다. 나는 그것들이 updateDisplayList() 메소드에 전달 된 값이라고 생각한다.

구성 요소가 자식을 추가 또는 제거한 후에 크기를 조정하려면 구성 요소 자체의 수명주기를 거쳐야합니다. 그래서이 코드 :

trace(container.width); 
container.addChild(myChild); 
trace(container.width); 

는 아마 컨테이너가 측정 (실행할 수있는 기회가되지 않았기 때문에),),의 updateDisplayList을 (컨테이너의 폭을 변경하거나의 commitProperties() 메소드하지 않습니다.

이 방법이 도움이되지 않는다면 좀 더 구체적인 정보를 얻고 코드를 제공해야합니다.

+0

감사합니다.) 방금 내 글을 편집했습니다. 감사합니다 –

+0

컴퓨터로 돌아 가면 실제 코드를 제공해야합니다. 그러나 updateDisplayList에 자식을 추가하지 않는 것이 좋습니다. createChildren (또는 초기 구성 요소 생성 후 수행하는 경우 commitProperties)에서 그렇게하십시오. – JeffryHouser

+0

필요 없음 =) 다시 한 번 감사드립니다 ^^ –

관련 문제