7

我实际上使用界面生成器在其中创建了UIScrollView一个。UITableView我设置我的内容大小UIScrollView

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

我将文件的所有者视图设置为UIScrollView

我创建了一个IBOutlet UITableView并将其设置在界面生成器中。

加载视图时。它为我的UIScrollView. 但它没有为我的UITableView. 此外,当我更改 my 的内容大小时UIScrollView,它会更改 my 的内容大小,UITableView就好像两个内容大小相关一样。

任何人都知道如何保持我在界面构建器中设置的表格视图的内容大小?

4

4 回答 4

13

AUITableView是一个UIScrollView。很少有将 a 嵌入到UITableViewa 中的情况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;
于 2012-01-09T14:13:31.497 回答
1

与 ScrollView 一起动态管理 TableView 高度的示例,适用于 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
    }

参考资料:

于 2015-09-28T10:59:59.320 回答
0

如果您仍然遇到问题,请在不需要滚动视图的情况下尝试此操作。

在玩了一段时间 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 是我发现的唯一解决方案,可以处理我的案例中的所有不同变量。

于 2012-08-22T00:31:06.153 回答
0

多次调用下面的方法。每次你打电话都会有更多的细胞。

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

scrollView.contentSize = tableView.contentSize;
于 2016-12-15T21:01:25.907 回答