2011-01-13 16 views
20

Czy umieszczam takie rzeczy w metodzie wyświetlania? Czy jest coś analogicznego?Czy NSView ma coś podobnego do metod UIView setNeedsLayout/layoutSubviews?

+0

możliwe duplikat [kakao - Jaki jest właściwy sposób opowiedzieć NSWindow aby ponownie wyświetlić jego zawartość] (http://stackoverflow.com/questions/4676412/cocoa-what-is-the-proper-way- to-tell-an-nswindow-to-redisplay-its-contents) –

+4

Myślę, że to inne pytanie. Jeden pyta, jak powiedzieć okno, aby ponownie wyświetlić wszystko od zera. Drugi pyta tylko o układ. –

+0

Rzeczywiście: to jest inne pytanie. – jonsibley

Odpowiedz

12

Analogicznie do layoutSubviews jest to metoda resizeSubviewsWithOldSize: z NSView. Przypuszczam, że analogicznie do setNeedsLayout będzie bezpośrednio wywoływać resizeSubviewsWithOldSize:[self frame].size.

9

Od OSX 10.7:

  • (void) układ jest równoważny layoutSubviews

Jest teraz identyczny setNeedsLayout.

zastąpić tę metodę, jeśli niestandardowy widok musi wykonać niestandardowy układ nie wyrażalne użyciu systemu opartego na układ ograniczający. W tym przypadku jesteś odpowiedzialny za wywołanie setNeedsLayout: kiedy coś wpływa na zmiany twojego własnego układu.

Nie może unieważnić jakiekolwiek ograniczenia jako część fazy układu, ani unieważnić układ swojej SuperView lub poglądów spoza widzenia hierarchii. Nie możesz także wywoływać losowania jako części układu.

Należy zadzwonić [Super układ] jako część realizacji.

+4

To jest tylko dla układu opartego na ograniczeniach (aka 'Auto Layout') – UncleAli

1

Czasami resizeSubviewsWithOldSize nie zostanie wywołana. Następnie spróbuj przesłonić resizeWithOldSuperviewSize.

1

resizeSubviewsWithOldSize: wydaje się, że nic nie robi. W ogóle mnie nie wezwano. Może dlatego, że używam autolayout, a dokumentacja mówi, że jest to związane z autorezoryzacją.

NSView za układ wydaje się być taka sama jak UIView za layoutSubviews. Oba można zastąpić, jeśli chcesz wykonać jakąś specjalną pracę do zastąpienia lub oprócz autorezoryzacji lub autolayout.

Wywołanie to na UIView

[view setNeedsLayout]; 

wydaje się być taka sama jak ta na NSView

view.needsLayout = YES; 

Które nasuwa się pytanie, dlaczego jest "setNeedsLayout" nawet nazwa funkcji? Naprawdę, zdecydowałeś się usunąć parametr z funkcji ustawiającej i zachować "zestaw" w tytule? Dlaczego nie "scheduleLayout"? Uniemożliwiłoby to stosowanie takich pytań w Stack Overflow.

+0

Dzięki za publikację twoich ustaleń. – mattsven

Powiązane problemy