2009-06-28 15 views
10

Stworzyłem prostą aplikację na iPhone'a z dwoma plikami .xib. W aplikacji delegata przy zastosowaniu dokończył wodowanie wyświetlać pierwszy plik .xib pod numerem:Nie wiem, dlaczego wartość UIView jest przybliżana o około 10px

[window addSubview:myView]; 

i zrobić to samo na IBAction na UIButton aby zmienić widok na myView2.

Po uruchomieniu aplikacji widzę biały pasek o wielkości około 10 pikseli dla obu widoków. Zauważyłem również, że przyciski są przesunięte o 10 pikseli (w przybliżeniu). Mam więc wrażenie, że widok jest wyświetlany z 10 pikseli poza ekranem, a kończy krótko.

Każdy pomysł, dlaczego tak się dzieje, jak mogę to naprawić, lub jak mogę dalej debugować, co się dzieje? Sprawdziłem moje pliki .xib i pochłaniają pełną wysokość urządzenia (tj. Brak białych pasków), więc wygląda to na problem w XCode.

EDYCJA: Zawęziłem problem trochę. Używam dwóch metod do załadowania podglądu. Kiedy ładuję pierwszy widok wewnątrz applicationDidFinishLaunching wszystko jest w porządku. Jednak jeśli zamieniam dwie wiadomości na window metodą [self originalView], wszystko pójdzie trochę w szum.

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    //[self originalView]; <- I want to use this instead of the following two lines 

    // Override point for customization after app launch  
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 

} 

-(void)endView{ 
    endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil]; 
    [window removeFromSuperview]; 
    [window addSubview:endV.view]; 
} 
-(void)originalView{ 
    viewController = [[MyAppViewController alloc] init]; 
    [window removeFromSuperview]; 
    [window addSubview:viewController.view]; 

} 

Z tego co widzę, jestem zawsze nazywając te same linie kodu, bez względu na to, czy to wewnątrz applicationDidFinishLaunching lub w [self originalView] ale wydaje się window obraca się inny obiekt.

Odpowiedz

12

Podczas używania kontrolera UIViewController w normalny sposób (tj. pushing it on a UINavigationController), dostosowuje on swoją ramkę widoku.

Ponieważ ręcznie dodajesz podgląd, musisz samodzielnie ustawić ramkę. Początek znajduje się w prawym górnym rogu (u góry paska stanu). Chcesz przesunąć widok o 20 pikseli w dół.

+0

Wszystkie przykłady, które widziałem, używają UINavigationController do wyświetlania hierarchii list, to do czego służy tylko? Czy mogę go używać do kontrolowania, które widoki są wyświetlane, nawet jeśli nie wymagają one paska nawigacyjnego itp.? –

2

W programie budującym interfejs można dodawać symulowane elementy interfejsu, które będą wyświetlane programowo (na przykład pasek stanu lub pasek nawigacji). W swoim kontrolerze wybierz widok i przejdź do zakładki Atrybuty. Tutaj możesz symulować pasek stanu, górny pasek lub dolny pasek.

5

Oto moje rozwiązanie:

// adjust the frame of subview which is going to be add 
self.navController.view.frame = CGRectMake(0, 0, 320, 460); 
[self.view addSubView:self.navController.view]; 

To działa dobrze dla mnie teraz, powodzenia ~ :)

1

Wygląda zadzwonić pushVC do tego UIViewController w niewłaściwym miejscu. Miałem ten sam problem. Został on rozwiązany przez przeniesienie [self.navigationController pushViewController: animated:] z viewDidLoad do viewDidAppear: w poprzedniej UIViewController w hierarchii.

1

Ilekroć pojawia się dziwna luka, czy widok jest częściowo ukryty za pasku stanu, to ma coś wspólnego z obu

  1. definicji shouldAutorotate w kontrolerze root - nie wiem, czy jest to błąd czy nie , ale starają się pozostać spójne ze zwrotem tej funkcji dla wszystkich podsektorów viewcontrollers (zazwyczaj skutkuje viewcontroller są ukryte za pasku stanu)
  2. definicja wantsFullscreen z podrzędny - jeśli to możliwe
ustawiony na NIE

miałem bot h błędów w mojej aplikacji i rozwiązać je! Mam nadzieję, że mógłbym zaoszczędzić trochę czasu (dużo straciłem na tym)

Powiązane problemy