我实际上使用界面构建器在其中创建了一个UIScrollView
UITableView
。我将UIScrollView
的内容大小设置为:
scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
我将文件的所有者视图设置为UIScrollView
我创建了一个IBOutlet
UITableView
,并在界面构建器中设置了它。
加载视图时。它会显示UIScrollView
的正确内容大小。但它没有显示UITableView
的正确内容大小。此外,当我更改UIScrollView
的内容大小时,它会更改UITableView
的内容大小,就好像两个内容大小都相关。
任何人都知道如何保留我在界面构建器中设置的表视图的内容大小?
答案 0 :(得分:12)
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;
答案 1 :(得分: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
}
参考:
答案 2 :(得分:0)
如果您仍然遇到问题,请尝试此操作而无需使用scrollView。
在玩了一段时间的DBD示例之后,我发现frame和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);
尝试设置帧的最大高度,但如果有大量单元格,则保持滚动所有内容的能力。这个hack似乎运行良好,如果需要可以用更多条件进行修改:
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);
}
这肯定有用。您可能需要调整.xib或代码中的autoresizingMask,但这个hack是我发现的唯一可以处理我案例中所有不同变量的解决方案。
答案 3 :(得分:0)
多次调用以下方法。每次打电话都会有更多的细胞。
$user