Высота UITableView по количеству ячеек

У меня есть UITableView с переменным числом строк (ячеек) - высота этих строк является постоянной. Я бы хотел, чтобы высота UITableView зависела от количества строк.

Кроме того, я хотел бы, чтобы UITableView точно обертывал ячейки, поэтому в нижней части ничего не было. Поэтому, если ячейка имеет высоту 60, tableview должен быть 60 для одной ячейки, 120 для двух ячеек и т.д.

Спасибо заранее!

Ответ 1

Вы можете получить доступ к источнику данных, чтобы найти количество ячеек, которые будут отображаться. Умножьте это число на высоту одной строки, и вы получите высоту всего вида таблицы. Чтобы изменить высоту табличного представления, вы можете изменить его свойство кадра.

Вы можете получить доступ к (постоянной) высоте одной строки вашего представления таблицы, обратившись к свойству rowHeight. Если вы заполните представление таблицы объектами массива с именем myArray, вы можете использовать следующий код:

CGFloat height = self.tableView.rowHeight;
height *= myArray.count;

CGRect tableFrame = self.tableView.frame;
tableFrame.size.height = height;
self.tableView.frame = tableFrame;

Вы также можете узнать, сколько строк будет отображаться в виде таблицы, задав представление таблицы непосредственно, а не объект данных. Что-то вроде этого должно работать:

NSInteger numberOfCells = 0;

//finding the number of cells in your table view by looping through its sections
for (NSInteger section = 0; section < [self numberOfSectionsInTableView:self.tableView]; section++)
    numberOfCells += [self tableView:self.tableView numberOfRowsInSection:section];

CGFloat height = numberOfCells * self.tableView.rowHeight;

CGRect tableFrame = self.tableView.frame;
tableFrame.size.height = height;
self.tableView.frame = tableFrame;

//then the tableView must be redrawn
[self.tableView setNeedsDisplay];

Ответ 2

Вот как я решил.

CGFloat height = self.mMyTicketTable.rowHeight;

float h = height * [self.mArrEName count];
if(h > 410.0)
{
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, 410);
}
else
{
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, h);
}
NSLog(@"h:%f", h);

Ответ 3

Внедрить этот метод делегата UITableView. Всякий раз, когда строка ячейки создает ее, присваивайте высоту каждой ячейке

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     return 60.0f;
}

и реализовать этот код в методе viewDidLoad

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))];

Примечание. - yourArray - это NSArray, который содержит данные о том, сколько строк вы хотите заполнить.

ИЛИ

Если значение атрибута yourArray динамически, вызовите этот метод после получения значения.

-(void)setHeightOfTableView
{

    /**** set frame size of tableview according to number of cells ****/
    float height=60.0f*[yourArray count];

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))];
}

Я надеюсь, что это сработает. Благодаря

Ответ 4

Я сделал функцию, чтобы установить высоту uitableview в соответствии с кодом @timvermeulen

-(void)setTableViewheightOfTable :(UITableView *)tableView ByArrayName:(NSArray *)array
{    
    CGFloat height = tableView.rowHeight;
    height *= array.count;

    CGRect tableFrame = tableView.frame;
    tableFrame.size.height = height;
    tableView.frame = tableFrame;
}

Ответ 5

Вы можете использовать метод делегата tableView:numberOfRowsInSection: для динамической установки высоты UITableView, например:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    CGFloat numberOfRows =  self.myArray.count;

    CGRect tableViewFrame = tableView.frame;
    tableViewFrame.size.height = numberOfRows * tableView.rowHeight;
    tableView.frame = tableViewFrame;

    return numberOfRows;
}

Не забудьте также определить rowHeight где вы инициируете табличное представление:

self.myTableView.rowHeight = 60.0;

... но если ваша цель - просто скрыть пустые ячейки в таблице, вам следует добавить к ней пустое представление tableFooterView и игнорировать весь приведенный выше код (поэтому сначала попробуйте эту строку):

self.myTableView.tableFooterView = [UIView new];