2009-08-31 17 views
15

MainWindow.xib'de yüklü bir görünüm var. Bu, tüm ekranda bir görüntü (320 X 480) gösteren bir uiimageview ile sadece bir görünümdür. Uygulamanın yükleri bu görünümünü görüntülemek ve sonra birIPhone - UIView addSubview Boşluk en üstte

[self.view addSubview:tabbarController.view]; 

Tab Bar Kontrolör sadece kendisine eklenmiş 2 Görünüm Kontrolörleri ile UITabBarController olduğunu yaptığınızda. Alt görünümüne tabbarController'ın görünümünü eklediğinde, yaklaşık 20 pikselin üst kısmında bir boşluk bırakır. Uygulamamın bir durum çubuğu var, ancak bu temelde başka bir odaya ait. Bu, benim görünüm denetleyicime eklemediğim sürece olur:

self.view.frame = CGRectMake(0, 0, 320, 480); 

Bunu herkes açıklayabilir mi?

yapıyordum ama bunu yapmamam söylendi. Yani şimdi bir alt görünüm ekliyorum, ama neden 20px göstermemek için benim görünümün CGRect ayarlamak zorunda anlamıyorum.

cevap

17

UITabBarController, görünümünün, diğer UIView'nin alt görünümü olarak değil, UIWindow alt görünümü olarak eklenmesini bekler. Çerçeve özelliği, görünümün ofsetini süper görünümü içinde tanımlar; böylece UITabBarController uygulaması, durum çubuğuna oda bırakmak için görünümünün çerçevesini varsayılan olarak 20 piksel oranında dengeler. UITabBarController'ı, zaten durum çubuğu için 20 piksele kadar kaydırılmış bir görünüme ekleyerek standart olmayan bir şekilde kullanıyorsunuz. UITabBarController, görüşünü süper görüntüne göre 20 piksel daha ekleyerek görmezden geliyor.

Bunu düzeltmek için bir temiz yolu görüntü yerine pencerenin bir subview UITabBarController'ın görünümü ekleyin:

[[[UIApplication sharedApplication] keyWindow] addSubview:tabbarController.view]; 

(Not

: keyWindow yöntemin yalnızca pencere dönecektir zaten aradım eğer makeKeyAndVisible. Aksi takdirde, UIViewController'ınızda bir pencere özelliği ayarlamak isteyebilirsiniz.)

+0

Açık bir açıklama için teşekkürler. Belki de geri dönüp uygulamamın bir kısmını yeniden yapılandırmalıyım. Bazı şeyleri doğru şekilde yapmak istiyorum, ancak uygulama denetleyicisi mantığını uygulama temsilcisinden ayırmanın daha iyi olabileceğini düşündüm - bu nedenle root view denetleyicim ihtiyaç duyduğu her şeyi yapıyor. Bu benim root view controller'ımda neden subview olarak eklemek yerine self.view = tabbarController.view yapmamı açıklarsa, boşluğu alamazdım. Mükemmel cevap. Yapabilirsem daha çok oy alırdım. – Brian

+0

İçgüdülerinizin burada iyi olduğu anlaşılıyor. Bu, şimdilik çalışmak zorunda olduğumuz Cocoa Touch'daki tasarım sınırlamalarından sadece bir tanesi. Tabi ki tabbarController.view penceresini uygulamanızın temsilcisinden eklemenize gerek duymasa da aklınızda bulundurun. En mantıklı olduğunu düşündüğünüz yer varsa, görünüm denetleyicinize ekleyebilirsiniz. Pencere nesnesine, keyWindow yöntemiyle ya da controllerDiskFinishLaunching uygulamasında arka tarafınıza bir özellik olarak ayarlayarak erişmeniz gerekir: – cduhn

+0

ama bu tabbarcontroller.view şimdi window.view bir alt görünümü olduğu anlamına gelmez? Ama benim durumumda doğru değil, bir reklam görünümüm ve ikinci bir içerik görünümüm var. Ve içerik ekranına tabbarcontroller.view ekliyorum. Bu modada, viewcontroller, reklamlara bağlı olarak içeriği/reklamı ele alacaktır. pencereye tabbarcontroller.view eklerseniz, ben viewcontroller kullanarak görüşlerini ele alabileceğimi düşünmüyorum. ne düşünüyorsun? – LolaRun