我需要确定 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)