Высота 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];