Использование UITableViewController с таблицей небольшого размера? - PullRequest
15 голосов
/ 21 октября 2008

При использовании UITableViewController метод initWithStyle: автоматически создает базовый UITableView с - согласно документации - "правильными размерами".

Моя проблема в том, что эти «правильные размеры» кажутся 320х460 (размер экрана iPhone), но я помещаю эту пару TableView / Controller в UINavigationController, который сам содержится в UIView, который сам составляет примерно половину высоты экран.

Нет разбора рамок или границ, которые я могу придумать, похоже, правильно сбрасывает размер таблицы, и поэтому он «слишком длинный», что означает, что есть набор строк, которые отталкиваются от нижней части экрана и не видны или недоступны при прокрутке.

Итак, мой вопрос сводится к следующему: как правильно указать UITableViewController изменить размер его компонента UITableView до указанного прямоугольника?

Спасибо!

Обновление Я испробовал все предложенные здесь методы, но безрезультатно, но нашел одну интересную вещь: если я вообще откажусь от UINavigationController (что я еще не готов сделать для производства, но в качестве эксперимента), и добавьте табличное представление как прямое подпредставление включенного представления, которое я упомянул, размер кадра, заданный , соблюдается . самый момент Я заново ввел UINavigationController в микс, независимо от того, был ли он добавлен как подпредставление до или после представления таблицы, и неважно, будет ли alloc / init его до или после представления таблицы добавлено как подпредставление, результат такой же, как и раньше.

Я начинаю подозревать, что UINavigationController не слишком командный игрок ...

Обновление 2 Предложение проверить размер кадра после отображения таблицы на экране было хорошим: оказывается, что контроллер навигации фактически изменяет его размер некоторое время между загрузкой и отображением. Мое решение, в лучшем случае хакерское, состояло в том, чтобы кэшировать кадр, данный при загрузке, и сбрасывать его, если он был изменен в начале tableView: cellForRowAtIndexPath :. Почему там спрашиваешь? Потому что это единственное место, где я нашел работу, вот почему!

Я не считаю это решением, поскольку оно явно неуместно, но в интересах всех, кто читает, оно, похоже, работает.

Ответы [ 11 ]

11 голосов
/ 21 октября 2008

Почему бы просто не использовать обычный UIViewController и создать таблицу вручную?

6 голосов
/ 29 мая 2009

У меня была такая же проблема, и я решил ее с помощью:

-(void) loadView {
    [self setView:[[[UIView alloc] initWithFrame:CGRectZero] autorelease]];
    [[self view] setAutoresizesSubviews:NO];

    /* Create & configure table and other views... */

    [self setResultsTable:[[RadarTableViewController alloc] initWithNibName:nil bundle:nil]];
    [[resultsTable view] setFrame:CGRectMake(0,45,320,200)];
}

Это делается в родительском (просто в моем случае обычном UIViewController) контроллере.

3 голосов
/ 01 мая 2009

У меня была та же проблема, и я решил ее, изменив размер tableView в функции viewDidAppear UITableViewController. Не идеальное решение, но оно работает.

2 голосов
/ 14 мая 2012

Вы можете установить верхнее поле, используя:

    UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0);
    self.tableView.contentInset = inset;

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

Не следует использовать UITableViewController, просто используйте UIViewController и программно создайте UITableview

1 голос
/ 16 апреля 2014

я исправил эту проблему с помощью этого кода

{
    UIEdgeInsets insets;
    insets.left = 0;
    insets.right = 0;
    insets.top = 0;
    insets.bottom = 60;
    self.tableView.contentInset = insets;
    [self.tableView setScrollIndicatorInsets:insets];
}
1 голос
/ 22 октября 2008

Проверьте свойства autoresizingMask и contentMode для UITableView. Они оба могут повлиять на кадр.

1 голос
/ 21 октября 2008

Я не уверен, почему вы создаете дополнительный контроллер представления для вашей таблицы. Однако в вашем коде я не вижу, как вы добавляете табличное представление к его родителю. Вы также можете попытаться уменьшить высоту границ, пока все не появится на экране; как только вы это сделаете, это может дать вам представление о том, почему это не работает так, как вы ожидаете.

1 голос
/ 21 октября 2008

Я согласен с ответом Бена. Я часто сталкиваюсь с ситуацией, когда мне нужно изменить размер UITableVIew из-за других элементов управления в представлении.

У меня обычно просто обычный UIViewController с UITableView IBOutlet. Затем, если мне нужно, я могу просто манипулировать фреймом объекта UITableView, чтобы получить нужный мне размер.

0 голосов
/ 26 сентября 2013

Попробуйте:

self.edgesForExtendedLayout = UIRectEdgeNone;

//This one in case your NavigationController is not Translucent
self.extendedLayoutIncludesOpaqueBars = NO; 

Надеюсь, это поможет.

0 голосов
/ 14 июня 2012

Установить кадр в UINavigationController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...