2012-05-01 10 views
8

Mam NSTableView oparty na widoku, który jest osadzony w NSScrollView. Ma niestandardowe komórki, które mają x najwyższą liczbę pikseli. NSScrollView ma taki sam rozmiar jak panel, z którego jest wyodrębniony. Chcę zmienić rozmiar całego NSTableView w zależności od tego, ile wierszy znajduje się w tabeli.Zmiana rozmiaru NSTableView lub NSScrollView w zależności od liczby wierszy w tabeli

Wszystko działa oprócz zmiany rozmiaru. Zmiana rozmiaru widoku przewijania ręcznie w IB wydaje się mieć pożądany wpływ, ale NSSrollView nie wydaje się mieć metody klasy, aby zmienić rozmiar swojego widoku (jak NSView ma setFrame). Czy powinienem zmienić rozmiar widoku scollview, tableview, both lub else? Czy NSScrollView ma metodę setFrame lub podobną, której mi brakuje?

Dzięki.

+0

Dlaczego chcesz to zrobić? Jeśli umieścisz 'NSTableView' w Konstruktorze interfejsów, jest już wewnątrz widoku przewijania i wszystko jest zarządzane dla ciebie. –

Odpowiedz

4

Zanim spróbujesz to zrobić programowo, upewnij się, że maski autosizing widoku konspektu jest poprawnie skonfigurowany w pliku nib. Wygląda na to, że chcesz, aby widok konspektu (i jego widok przewijania) zawsze pozostawał taki sam jak okno, w którym znajduje się wewnątrz.

Domyślnie maski autosizing od An NSScrollView/NSOutlineView kombi, że miejsce pod oknem wygląda następująco:

enter image description here

Innymi słowy, to skonfigurować, aby zawsze pozostanie taki sam rozmiar jak to jest teraz, bez względu na to, jak duże jest to okno.

Co chcesz zrobić, to zmienić maski autosizing wyglądać jak na obrazku poniżej:

enter image description here

Aby to zrobić, należy kliknąć w polu autosizing białym wszędzie tam, gdzie jest przerywana czerwona linia przełącz na czerwoną linię. Po skonfigurowaniu w ten sposób widok przewijania (i widok tabeli) będzie zawsze (automatycznie) zmieniany tak, aby był taki sam jak okno, w którym się znajduje.

Może być również sposób na osiągnięcie tego przy pomocy nowego Lwa " auto-layout ", ale będę musiał zostawić to komuś, kto ma większe doświadczenie z tym.

+0

Nie miałem pojęcia, że ​​mogę to zrobić w IB! dziękuję za tak dokładną odpowiedź. – rick

0
scrollview.frame = CGRrectMake(x, y, w, h); 
1

W przypadku naprawdę trzeba to zrobić (na przykład, jeśli chcesz wszystkie wiersze, aby zmieścić się w Scrollview łagodzenia potrzebę przewijania) i widok przewijania jest tylko część okna/Widok można zrobić:

[[myTableView enclosingScrollView] setFrame:newFrameRect]; 
+0

Próbowałem tej techniki, ale tabela nie została zaktualizowana wizualnie, czy jest jeszcze inne polecenie, które należy zastosować? –

Powiązane problemy