5

Я фактически создаю UIScrollView с UITableView внутри него с построителем интерфейса. Я установил размер содержимого моего UIScrollView с:Ошибка размера содержимого для UITableView в UIscrollView

scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

и я поставил точку зрения владельца моего файла на UIScrollView

Я создал IBOutletUITableView, и я поставил его в интерфейсе строителя.

Когда изображение загружено. он отображает правильный размер содержимого для моего UIScrollView. Но он не отображает правильный размер контента для моего UITableView. Кроме того, когда я изменяю размер содержимого своего UIScrollView, он меняет размер содержимого моего UITableView, как если бы оба размера контента были связаны.

Кто-нибудь знает, как я могу сохранить размер содержимого моего представления таблицы, который я установил в построителе интерфейса?

ответ

12

A UITableView является UIScrollView. Очень мало времени, когда было бы полезно вставить UITableView внутри UIScrollView.

Предполагая, что вы действительно этого хотите, вам нужно сделать следующее. Вероятно, в вашем UIViewController в таких методах, как viewDidAppear: или где-то вы после заполнения таблицы.

// Set the size of your table to be the size of it's contents 
// (since the outer scroll view will handle the scrolling). 
CGRect tableFrame = tableView.frame; 
tableFrame.size.height = tableView.contentSize.height; 
tableFrame.size.width = tableView.contentSize.width; // if you would allow horiz scrolling 
tableView.frame = tableFrame; 

// Set the content size of your scroll view to be the content size of your 
// table view + whatever else you have in the scroll view. 
// For the purposes of this example, I'm assuming the table view is in there alone. 
scrollView.contentSize = tableView.contentSize; 
+0

Он по-прежнему не работает ... На самом деле, когда я NSLog tableView.frame, он отображает меня (null). Я не понимаю ... – kschaeffler

+0

Собственно, владелец моего файла является делегатом UIScrollView и UITableView, который является scrollView. Это проблема? – kschaeffler

+0

Я должен был быть более явным. 'tableView' и' scrollView' должны быть IBOutlets, которые вы связали с этими элементами. – DBD

0

Если у вас все еще есть проблемы, попробуйте это без необходимости прокрутки.

Позабавившись с примером DBD в некоторое время, я обнаружил, что рама и contentSize, кажется, не быть в состоянии установить вместе, как:

self.tableView.contentSize = CGSizeMake(320, scrollHeight); 
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,self.tableView.contentSize.height); 

Попытка была установить максимальную высоту но сохраняйте возможность прокрутки, несмотря на весь контент, если было большое количество ячеек. Этот хак, похоже, хорошо работает и может быть модифицирован с дополнительными условиями, если необходимо:

int cellCount = [YOURARRAY count]; 
CGFloat scrollHeight = cellCount*44+44;//for a cell with height of 44 and adding 44 if you have a toolbar at the bottom 

self.tableView.contentSize = CGSizeMake(320, scrollHeight);//you can change the width and or let the .xib control the autoresizing 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && cellCount < 14) 
{ 
    //here's were you can add more conditions if you're in landscape or portrait, but this handles 14 cells with a heightForHeaderInSection of 46 in landscape 
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,scrollHeight); 
} 
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && cellCount < 7) 
{ 
    //same as above but it's for the iPhone in portrait 
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,scrollHeight); 
} 

Это работает точно. Возможно, вам придется настроить маску autoresizingMask внутри вашего .xib или в вашем коде, но этот взлом - единственное решение, которое я нашел, которое заботится обо всех переменных в моем случае.

1

Пример для динамического управления Tableview Рост наряду с ScrollView, работает в Swift:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     // Custom Cell 
     let cell:TblPortCell = self.tableList.dequeueReusableCellWithIdentifier("cell") as! TblPortCell 

     //tableList is the OutLet for the table 
     tableList.sizeToFit() 
     // Set the size of the table to be the size of it's contents 
     // (since the outer scroll view will handle the scrolling). 
     let height = tableList.frame.size.height 
     let pos = tableList.frame.origin.y 
     let sizeOfContent = height + pos + 130 
     //scrollView is the Outlet for the Scroll view 
     scrollView.contentSize.height = sizeOfContent 
     scrollView.sizeToFit() 

     cell.selectionStyle = UITableViewCellSelectionStyle.None 
     return cell 
    } 

Ссылки на:

0

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

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

scrollView.contentSize = tableView.contentSize; 
Смежные вопросы