5

UINavigationController içeren bir UITabBarController var.UITableView kısmen tarafından gizlenen UITabBar

self.voucherTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain]; 
self.voucherTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; 

Ancak UITabBar UITableView örtüşen aşağıdaki gibidir: Görünür UIViewController içinde, programlama yoluyla bir UITableView yaratıyorum.

[[UIScreen mainScreen] applicationFrame] yüksekliğini çıkardığımda, 460.00 değerini döndürürken, 367.00 olmalıdır.

Arabirim Oluşturucusu'nda, otomatik olarak görüş yüksekliğini 367,00 olarak ayarlayan 'Simulated Metrics' kullanıyorum.

Eksik olduğum bir şey var mı, deneyeceğim ne olursa olsun ihtiyacım olan 367.00 yüksekliğini elde edemiyorum. Geçici düzeltme olarak

, bunu neden çalışmadığını Yürümediği güzel olurdu bu gerçekten ideal değildir, elle UITableView çerçevesini belirledik:

self.voucherTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 367) style:UITableViewStylePlain]; 
+0

Belki de tablonun autoSizingMasks kutusunu işaretlemelisinizView – ender

+0

Özgün yazımı, "autoresizingMask" değerini ayarladıklarımla güncelledim. –

cevap

4

Gitmelisiniz self.view.bounds, aradığınızı göründüğü gibi görünüm sınırlarınızı size sağlarken, sonuncusu tüm ekran çerçevesini döndürdüğü için [[UIScreen mainScreen] applicationFrame] yerine self.view.bounds'u kullanın.

+0

Self.view.bounds.size.height değerini çıkarmayı denedim ve yine 460.00 döndürdü. –

+2

Bunu yapmaya nerede çalışıyorsunuz? - (void) viewDidAppear: (BOOL) animasyonunda güncellenecektir; (belki de - (void) viewWillAppear: (BOOL) animasyonlu; ayrıca, ama bundan emin değilim) – Ariel

+0

Farkında olmanız gereken başka bir şey wantsFullScreenLayout özelliği. UIViewController'ınız için YES olarak ayarlarsanız, sekme çubuğunu hesaba katmadan görünümünüzü günceller. – Ariel

2

Sen UITabBarController için UINavigationController örneğini ekleyin ve sonra hayatınızı çok kolaylaştırması gerekir UINavigationController örneğinin rootViewController özelliğine bir tablo görünümü denetleyicisi eklemek gerekir.

Bunun basit bir örneği olarak, boş bir pencere tabanlı uygulama oluşturun (şablonlar bunu gerçekten olduğundan çok daha karmaşık hale getirir).

Projenize UIViewController/UITableViewController alt sınıflarınızı ekleyin, ardından bu kodu projenizi oluşturmak için bir kılavuz olarak kullanın. Bu kod AppDelegate sınıfta: BrowserViewController Yukarıdaki kod örneğinde

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // create our table view controller that will display our store list  
    StoresViewController *storeListController = [[StoresViewController alloc] init]; 


    // create the navigation controller that will hold our store list and detail view controllers and set the store list as the root view controller 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:storeListController]; 
    [navController.tabBarItem setTitle:@"TableView"]; 
    [navController.tabBarItem setImage:[UIImage imageNamed:@"cart.png"]]; 


    // create our browser view controller  
    BrowserViewController *webBrowserController = [[BrowserViewController alloc] init]; 
    [webBrowserController.tabBarItem setTitle:@"WebView"]; 
    [webBrowserController.tabBarItem setImage:[UIImage imageNamed:@"web.png"]]; 

    // add our view controllers to an array, which will retain them 
    NSArray *viewControllers = [NSArray arrayWithObjects:navController, webBrowserController, nil]; 


    // release these since they are now retained 
    [navController release]; 
    [storeListController release]; 
    [webBrowserController release]; 


    // add our array of controllers to the tab bar controller 
    UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    [tabBarController setViewControllers:viewControllers]; 


    // set the tab bar controller as our root view controller  
    [self.window setRootViewController:tabBarController]; 


    // we can release this now since the window is retaining it 
    [tabBarController release]; 


    [self.window makeKeyAndVisible]; 

    return YES; 
} 

UIViewController bir alt sınıfıdır ve StoresViewController sınıf UITableViewController bir alt sınıfıdır. UITabBarController ve UINavigationController örneklerini program aracılığıyla oluşturulur ve pencereye eklenir.

UITableViewController sınıfını alt sınıflara ayırarak, program aracılığıyla UITableView örneğini oluşturmanız ve ihtiyacınız olan her şeyi kutudan çıkarmanız gerekmez.

[self.navigationController pushViewController:YourDetailViewControllerInstance animated:YES]; 

Bu senin için UINavigationController örneğinin görünümü hiyerarşiye ayrıntılı görünüm UIViewController alt sınıf ekleyecektir: Eğer UINavigationController örneğinin yığınının üzerine bir ayrıntı görünümü itmek gerektiğinde

, sadece buna benzer kullanım şey var ve geçişi canlandırın.

Bu bir çok denetleyiciye sahiptir, ancak buna kesinlikle değecektir ve bu yöntem görüntülerin yeniden boyutlandırmayı yönetmesine ve araç çubuklarını/gezinme çubuklarını tek başına dikkate almasına olanak sağladığından, karşılaştığınız birçok sorundan kaçınacaktır.