如何计算UIView控制器的固有内容高度?



我需要识别UIViewController的高度才能在底板上显示它。为了创建底表,我使用FitterSheets。 图书馆。它接受我想在工作表和一些高度内显示的UIViewController。然后,库显示具有我指定高度的视图控制器。似乎一切正常且有意义,但是我如何计算视图控制器的高度?它可以是动态的(例如,堆栈视图中的动态视图(。在显示它之前,我无法计算它的高度。换句话说,我不知道屏幕中内容的大小是多少,因为我从服务器获取这些数据。如果你不明白问题,这里有一些代码截图:

present(SheetViewController(myViewController, size: ?), animated: false); 

我应该通过什么尺寸?当然,我可以大致计算它(例如,根据我从 API 获得的数据,我可以将数据量乘以屏幕中某个视图的高度(。但是,这将是近似的,不准确。

我认为我的解决方案应该如下:我在展示SheetViewController时没有指定任何高度。我只是在我的视图控制器的视图完全显示后调整SheetViewController的大小。伪代码将如下所示:

override viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var contentSize = 0 
view.subviews.forEach {
contentSize += $0.frame.height
}
sheetViewController?.resize(contentSize); 
}

但我不认为这是正确的解决方案,它实际上不起作用。那么,解决我的问题的最佳方法是什么?如何显示高度等于内容高度的底页?

按照库文档中的说明:

如果视图控制器小于指定的大小,则它只会增长到所呈现视图控制器的内部高度。如果它更大,它将在初始值设定项或 setSizes 函数中指定的每个高度处停止。

因此,您可以删除viewDidAppear中的代码,只需添加一个大小数组,其中第一个大小是确定工作表初始大小的大小,例如:

present(SheetViewController(myViewController, sizes: [.fixed(100), .fullScreen]), animated: false)

最新更新