2011-01-13 6 views
20

Tôi có đặt những thứ đó vào phương pháp hiển thị không? Hay có cái gì đó tương tự?NSView có tương tự với phương thức setNeedsLayout/layoutSubviews của UIView không?

+0

có thể trùng lặp với [ca cao - Cách thích hợp để yêu cầu NSWindow hiển thị lại nội dung của nó là gì?] (Http://stackoverflow.com/questions/4676412/cocoa-what-is-the-proper-way- to-tell-an-nswindow-to-redisplay-nội dung của nó) –

+4

Tôi nghĩ đó là một câu hỏi khác. Một là yêu cầu làm thế nào để nói với cửa sổ để hiển thị lại tất cả mọi thứ từ đầu. Người kia chỉ hỏi về cách bố trí. –

+0

Thật vậy: đây là một câu hỏi khác. – jonsibley

Trả lời

12

Tương tự với layoutSubviews là phương pháp resizeSubviewsWithOldSize: của NSView. Tôi đoán, tương tự như setNeedsLayout sẽ gọi trực tiếp resizeSubviewsWithOldSize:[self frame].size.

9

Tính đến OSX 10.7:

  • (void) bố trí tương đương với layoutSubviews

Hiện nay có là một setNeedsLayout giống hệt nhau.

Ghi đè phương thức này nếu chế độ xem tùy chỉnh của bạn cần thực hiện bố cục tùy chỉnh không thể hiển thị bằng hệ thống bố cục dựa trên hạn chế. Trong trường hợp này, bạn chịu trách nhiệm gọi setNeedsLayout: khi có điều gì đó ảnh hưởng đến thay đổi bố cục tùy chỉnh của bạn.

Bạn không được làm mất hiệu lực mọi ràng buộc như một phần của giai đoạn bố cục, cũng không làm mất hiệu lực bố cục của người giám sát hoặc chế độ xem bên ngoài hệ thống phân cấp chế độ xem của bạn. Bạn cũng có thể không gọi một bản vẽ là một phần của bố cục.

Bạn phải gọi [super layout] như một phần của quá trình triển khai.

+4

Điều này chỉ dành cho bố cục dựa trên ràng buộc (còn gọi là 'Bố cục Tự động') – UncleAli

1

Đôi khi, resizeSubviewsWithOldSize không được gọi. Sau đó, hãy thử ghi đè resizeWithOldSuperviewSize.

1

thay đổi kích thướcSubviewsWithOldSize: có vẻ như không có gì. Không bao giờ được gọi là ở tất cả cho tôi. Có lẽ đó là vì tôi sử dụng autolayout và tài liệu nói rằng nó liên quan đến autoresizing.

Bố cục của NSView dường như giống với bố cục của UIViewSubviews. Cả hai đều có thể ghi đè lên nếu bạn muốn thực hiện một số công việc đặc biệt để thay thế hoặc ngoài việc tự động hóa hoặc tự động hoàn thành.

Calling này trên UIView

[view setNeedsLayout]; 

có vẻ là giống như này trên NSView

view.needsLayout = YES; 

Trong đó đặt ra câu hỏi, tại sao lại là "setNeedsLayout" ngay cả một tên hàm? Giống như, thực sự, bạn quyết định loại bỏ các tham số từ một hàm setter, và giữ cho "thiết lập" trong tiêu đề? Tại sao không "scheduleLayout"? Điều này sẽ giảm bớt sự cần thiết cho các câu hỏi Stack Overflow như thế này.

+0

Cảm ơn bạn đã đăng những phát hiện của mình. – mattsven