2013-06-19 2 views
1

A UIViewController с панелью навигации, панелью инструментов и баннером admob. Ниже приведен код для расчета высоты UITableView, удалив высоту баннера admob, панели навигации и панели инструментов.iOS UITableView высота вопрос, когда 3,5-дюймовый дисплей симулятора

Высота UITableview высока, если работает на экране симулятора IPhone 5 и 4 дюйма. Но если 3,5-дюймовый дисплей и не сетчатый дисплей, нижняя часть UITableView не может быть прокручена до.

Независимо от 4-х дюймов, 3,5-дюйма, а не-сетчатка отображения Высота (self.view.bounds) такая же, 548. И высота ячейки 41.

Для 3,5 дюймов и отображение без сетчатки, если я минус 88 (высота панели навигации и высота панели) после удаления высоты баннера admob, панели навигации и высоты панели. Затем UITableView прокручивается в порядке. Но это не совсем нормально для 4-дюймового дисплея.

Любой комментарий помогает, спасибо.

- (void)viewDidLoad{  
    // admob banner  
    bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];  
    bannerView_.rootViewController = self;  
    [self.view addSubview:bannerView_];  

    // uitableview  
    CGRect rect = self.view.bounds;  
    rect.origin.y = bannerView_.frame.size.height;   
    rect.size.height = rect.size.height - bannerView_.frame.size.height 
             - (self.navigationController.toolbar.frame.size.height) 
             - (self.navigationController.navigationBar.frame.size.height); 

    myTableView = [[UITableView alloc] initWithFrame:rect style:UITableViewStylePlain];  
    [self.view addSubview:myTableView];  
}  
+2

Как и где вы создаете self.view? – Alex

+0

Привет, алекс вы даете мне эту идею. UIViewController использует XIB-файл. И его текущий размер составляет 4 дюйма. Возможно, именно поэтому высота представления всегда равна 548, независимо от использования 3,5 или 4 дюймовых дисплеев. После изменения «Размер» на «Нет» свиток UITableView теперь является FINE. Спасибо всем. Я думаю, что это ответ. Но я не могу отметить ваш комментарий как ответ. – andrewwang1TW

ответ

3

Попробуйте изменить UITableView свойства программно автоматического изменения.

что-то вроде этого

myTableView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; 

обновление

используют это, чтобы определить размер экрана и установить UITableView высоту фрейма программно. (Помните, что вам нужно уменьшить (20) с точки зрения таблицы высота, потому что у вас есть панель инструментов)

- (BOOL)hasFourInchDisplay { 
    return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0); 
} 
+0

Спасибо, но не работает ... – andrewwang1TW

+0

вам нужно установить высоту кадра таблицы в программном режиме в зависимости от того, какой размер экрана работает в вашем коде. – Priyatham51

0

self.view.bounds Соответствие действительности: другое устройство? Если нет, везде, где вы задаете размер общего вида, необходимо изменить.

Кроме того, большая часть этой логики должна быть в viewWillLayoutSubviews, а не viewDidLoad, так как виды могут быть изменены после их загрузки.

+0

Спасибо, 1. Если я переведу код в viewWillLayoutSubviews, он все равно не работает, и UITableView еще короче (есть промежуток между UITableView и панелью инструментов), чем раньше. 2. «self.view.bounds меняются соответствующим образом на другом устройстве», я не знаю, что это значит. Должен ли я изменить его в соответствии с другим дисплеем, например, 3,5 или 4 дюйма дисплея? – andrewwang1TW

+0

Ваш UIViewController ('self') управляет размером UIView (' self.view'), который вы просматриваете здесь. Его 'height' и' width' являются частью его «границ». Если его «высота» не становится короче на более коротких устройствах iOS, ваш UITableView всегда будет одинаковой высоты. –

+0

Может иногда помочь ... в несколько схожей ситуации, это спасло день .. - \t \t (void) viewWillLayoutSubviews {// ужасное исправление, чтобы оно правильно позиционировалось на всех (большинство ????) устройствах! self.scrollView.contentOffset = CGPointMake (self.scrollView.contentOffset.x, 0); } – Fattie

0

это должно работать:

rect.size.height = self.view.frame.size.height - bannerView_.frame.size.height 
             - (self.navigationController.toolbar.frame.size.height) 
             - (self.navigationController.navigationBar.frame.size.height)-20; 

// 20 для строки состояния

+0

Спасибо, но на самом деле ему не хватает 88, если на 3,5-дюймовом дисплее. Кстати, наконец, я знаю, почему. БЛАГОДАРЮ. – andrewwang1TW

+0

Привет, Джатин Спасибо за помощь. Думаю, мнение Алекса помогает мне больше всего. Но Stackoverflow не может принять комментарий в качестве ответа. С другой стороны, ответ Priyatham51 также помогает. Таким образом, я принимаю это как ответ. Кстати, спасибо. – andrewwang1TW

Смежные вопросы