2008-10-28 24 views
7

Tôi đã gặp vấn đề này với Flex gần một năm và mỗi lần tôi thực hiện giải pháp hack nhanh chóng hoạt động trong thời gian này. Tôi muốn xem liệu có ai có ý kiến ​​hay hơn không.Cách tốt nhất để kích thước các thùng chứa trong Flex tuân theo các kích thước rõ ràng của thùng chứa cha mẹ

Dưới đây là những điều kiện của một vấn đề:

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

Vấn đề là, trái với những gì tôi muốn xảy ra, các VBox sẽ luôn luôn mở rộng để thích ứng với nội dung bên trong nó, thay vì gắn bó với các chiều cao rõ ràng của bố mẹ và tạo thanh cuộn.

Giải pháp của tôi đã được mã cứng trong một tham chiếu đến cha mẹ (hoặc tuy nhiên lên đến danh sách hiển thị chúng ta cần phải đi để tìm một giá trị thiết lập rõ ràng như trái ngược với tỷ lệ phần trăm).

Tôi thậm chí đã xem xét sử dụng này trong một lớp tiện ích:

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; 
} 

Hãy cho tôi biết có một cách tốt hơn.

Trả lời

8

Bạn phải sử dụng "autoLayout" tham số trên VBox như tài liệu nói:.

"Theo mặc định, kích thước của container VBox là đủ lớn để giữ hình ảnh vào nó kích thước ban đầu Nếu bạn tắt bố trí cập nhật và sử dụng hiệu ứng Thu phóng để phóng to hình ảnh hoặc sử dụng hiệu ứng Di chuyển để định vị lại hình ảnh, hình ảnh có thể mở rộng qua các ranh giới của vùng chứa VBox. Nếu hình ảnh tăng lên kích thước để nó mở rộng ra ngoài ranh giới của thùng chứa VBox, vùng chứa sẽ thêm thanh cuộn và clip hình ảnh ở ranh giới của nó.

Tôi hy vọng điều đó sẽ giúp ích cho bạn.

+0

Nó! Cảm ơn câu trả lời. – Aaron

1

Đặt các thuộc tính của container của bạn:

clipContent = true; 
verticalScrollPolicy = "off" 

Sau đó VBox của bạn sẽ tự động cắt khi nó có percentHeight = 100;

trình cho tôi trong Flex 3.

Nếu bạn cần phải nhận được sự ưa thích, bạn có thể thiết lập các scrollRect trên các đối tượng:

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

tùy thuộc vào những gì bạn cần nó để làm.

13

thiết lập minHeight = 0 là tất cả những gì bạn cần làm.

Điều này yêu cầu VBox bỏ qua các phép đo của trẻ em khi định kích thước chính nó, và tính chiều cao của nó thay vì dựa trên các ràng buộc của chính nó. Đặt mọi thứ khác như bình thường, di chuyển và mọi thứ khác sẽ hoạt động hoàn hảo.

Đã sử dụng DAYS vào ngày này một năm trước - không trực quan, có thể họ đã đặt tên cho tài sản là tốt hơn. Hy vọng điều này tiết kiệm u guys một thời gian ...

+3

Tuy nhiên, một trường hợp khác mà Flex không có ý nghĩa. Tôi muốn giữ một danh sách những thứ này ... – Aaron

+0

Tôi nợ bạn một thức uống mà bạn đã chọn nếu chúng ta gặp nhau. –

2

AutoLayout = false dường như chỉ ngăn không cho bố cục chạy lại khi trẻ em 'kích thước thay đổi. Tuy nhiên, nếu bạn thêm hoặc xóa trẻ em, bố cục sẽ chạy lại.

Đặt minHeight = 0 thực sự hoàn toàn ngắt kết nối (bên ngoài) kích thước của VBox khỏi kích thước và số lượng trẻ em, đó là những gì tôi muốn.

Nuôi thông qua mã nguồn Flex Tôi không thấy cơ chế mà theo đó thiết lập minHeight = 0 làm cho nó hoạt động như tôi muốn, vì vậy tôi chào Yarin để khám phá nó. Cảm ơn!

0

Thực tế, Yarin Kessler đã đưa cho chúng tôi câu trả lời đúng ở đây (thật không may, tôi không có quyền bình luận bài đăng của nó, đó là lý do tại sao tôi làm ở đây).

Khi kích thước HBox của bạn dựa trên giá trị phần trăm, bạn hy vọng rằng chỉ vùng chứa của nó sẽ ảnh hưởng đến kích thước của nó. Đó là sai, có một quy tắc khác, một quy tắc mạnh mẽ hơn. Thực tế là một thùng chứa (có HBox) có kích thước tối thiểu, đó là bổ sung các kích thước mặc định/rõ ràng của các thành phần con riêng của nó.

Vì vậy, nếu giá trị phần trăm của bạn dẫn đến giá trị nhỏ hơn kích thước tối thiểu, kích thước tối thiểu sẽ thắng và áp dụng cho HBox. Kể từ khi HBox hiển thị tất cả các con của nó, không cần thanh cuộn.

Vì vậy, sử dụng:

minHeight = 0; 
minWidth = 0; 

cũng giống như nói đến HBox đó là kích thước tối thiểu của nó là 0 thay vì kích cỡ trẻ em mặc định của nó. Bạn đang xác định lại nó và theo cách đó kích thước tối thiểu nhỏ hơn giá trị phần trăm và thua trận chiến.

Các cụm từ duy nhất tôi tìm thấy trong Adobe tài liệu giải thích này là một trong những điều này:

Một kích thước container phần trăm dựa trên tư vấn. Flex làm cho thùng chứa đủ lớn để phù hợp với trẻ em ở kích thước tối thiểu của chúng.

Hope tôi làm bản thân mình rõ ràng,

(cảm thấy tự do để sửa câu tiếng Anh không chính xác của tôi ...)

Các vấn đề liên quan