2011-02-08 18 views
19

Mam root UIViewController, że dodaję innych UIViewController jako subviews. Obecnie każdy z subviews jest zbyt niski (ukrywanie mojego paska zakładek). Kiedy próbuję więc coś takiego jak poniżej, to nie działa:iPhone: Jak ustawić ramkę UIViewController?

// Test setting frame size to see if it works 
self.view.frame = CGRectMake(0, 0, 200, 200); 

Że nie robi nic, aby zmienić rozmiar ramki.

Moje pytanie brzmi: w jaki sposób ustawić ramkę, gdy UIViewController jest inicjowany po dodaniu go jako widoku podrzędnego?

+0

Zastosowanie Interfejs Builder, jeśli możesz, zamiast. –

+0

Czy próbowałeś ustawić ramkę kontrolera podrzędnego w swojej metodzie viewDidAppear po dodaniu kontrolera podrzędnego? – alones

+0

Próbowałem w metodzie viewDoDoad. –

Odpowiedz

21

@Nic myślę gdy dodajesz, że inny widok, w tym czasie należy zdefiniować inny rozmiar ramki poglądy takiego:

Someviewcontroller *c = initWithNibName 
c.view.frame = CGRectMake(0, 0, 200, 200); 
[self addSubView:c]; 

nie wiem, czy to będzie działać, ale jest coś takiego .

+0

jak to zrobić, jeśli kontroler uiview jest częścią kontrolera uitabbarcontroller? – wagashi

+0

Nie otrzymałem twojego pytania ... – Robin

+0

Nie wiem, jak ustawić ramkę uiviewcontroller, gdy jest częścią kontrolera uitabbar. Czy teraz jest jasne? – wagashi

6

Po pierwsze upewnij się, że ramka nie zmienia rozmiaru. Prawdopodobnie to/zmienia/zmienia rozmiar, ale spodziewasz się, że spisze zawartość; Takie zachowanie nie jest domyślnie włączona na UIView, i musiałyby być ustawione poprzez:

[[self view] setClipsToBounds:YES]; 

dokładnie sprawdzić i upewnić się, że rama jest/nie jest zmiana rozmiaru po ustawieniu nowej ramki, spróbuj zalogowaniu następująco:

NSLog(@"New frame is: %@", NSStringFromCGRect([[self view] frame])); 

lub po prostu ustawienie przerwania po zmianie i sprawdzając wartość w swojej debugger.

+0

To wydaje się działać w jednym z moich widoków, ale inny widok jest UINavigationController, który nie działa, aby zmienić ramkę. –

4

Potem jest zawsze ...

// Screen, less StatusBar 
CGRect l_RectFrame = [UIScreen mainScreen].applicationFrame; 

albo ...

// Entire Screen 
CGRect l_RectFrame = [UIScreen mainScreen].bounds; 


MyView *l_aView = [[MyView alloc] initWithFrame:l_RectFrame]; 
... 
Powiązane problemy