UITableViewController последняя строка отключена - PullRequest
15 голосов
/ 06 октября 2011

У меня проблема с тем, что в моем UITableViewController последняя строка всегда обрезается наполовину.

Если у меня 20 строк, 20-я будет обрезана;если у меня 30, 30-е будет обрезано.

Я пытался изменить размер contentSize и фрейма UITableViewController, но он не работает.

Есть ли способизменить размер UITableViewController до правильного размера?

Заранее спасибо.

Некоторый код:

Инициализируйте его в другом классе:

 settingsTable = [[SettingTableViewController alloc] init];
    settingsTable.view.frame = CGRectMake(0, 0, 320, 480);
    [self.view addSubview:settingsTable.view];

вUITableViewController:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [settingsData count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:0];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:1] intValue];
}

Я не изменял размеры фрейма в UITableViewController

Ответы [ 7 ]

16 голосов
/ 06 октября 2011

В конструкторе интерфейса выберите UITableView, а затем в разделе «Параметры просмотра» удалите нижнюю панель авторазмера.Вы можете оставить все остальные такими, какие они есть, если они отличаются от скриншотов ниже.Важной является нижняя вертикальная черта.

Измените это:

Before

На это:

After

Или, чтобы сделать это программно:

settingsTable.autoresizingMask &= ~UIViewAutoresizingFlexibleBottomMargin;

Редактировать ( из комментариев ):

Ваша строка состояния установлена ​​напоказ или скрытый?Если он отображается, измените строку кадра на:

settingsTable.view.frame = CGRectMake(0, 0, 320, 460);

Или попробуйте любой из них и посмотрите, помогают ли они:

settingsTable.view.frame = self.view.bounds;
// or
settingsTable.view.frame = self.view.frame;
11 голосов
/ 15 декабря 2014

при использовании UITableViewController внутри контейнерных контроллеров и полупрозрачных UI-баров), так что я думаю, что это «сторона приложения» для правильной обработки его contentInset.

Вы можете попробовать

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 44, 0);
4 голосов
/ 06 октября 2011

Проблема в этой строке:

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

Вы не учитываете высоту строки состояния (20 пикселей в портретной ориентации). Общая доступная высота на самом деле 460px, а не 480px. Вот почему вы теряете 20px внизу. Вы должны вычислять кадры для размещения подпредставлений на основе границ родительского представления, а не жестко их кодировать:

settingsTable.view.frame = self.view.bounds;
1 голос
/ 25 июня 2015

Вы можете использовать следующий код

//Checking for device Orientation
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight))
    {
        NSLog(@"Landscape");
        //setting the height of the tableview  (height of tableview - height of Navbar)
        self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, self.view.frame.size.height-64, 0);
    }
    else
    {
        NSLog(@"Portrait");
        self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
    }
}
0 голосов
/ 13 декабря 2018

Могут быть ваши ограничения, у меня просто была эта проблема, пока я не обнаружил, что мое табличное представление было ограничено высотой и шириной суперпредставления, но случайно было отцентрировано в безопасной области x & y, отсекающей дно ..

0 голосов
/ 05 октября 2015

При работе с Auto-Layout убедитесь, что нижнее ограничение вашего tableView установлено равным 0 относительно его контейнера.

для установки через код (PureLayout)

[tableView autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:containerView withOffset:0];
0 голосов
/ 09 января 2015

У меня была похожая проблема в iOS 8

Простая настройка высоты нижнего колонтитула раздела в моем tableView решила проблему.

enter image description here

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