繁体   English   中英

如何计算 UIViewController 的内在内容高度?

[英]How to calculate UIViewController's intrinsic content height?

我需要确定UIViewController的高度,以便在底片内显示它。 为了创建底部表,我使用FitterSheets库。 它接受UIViewController ,我想在表内显示和一些高度。 然后,库以我指定的高度显示我的视图 controller。 看起来一切正常且有意义,但是我如何计算我的视图 controller 的高度? 它可以是动态的(例如,stackview 中的动态视图)。 在显示它之前我无法计算它的高度。 换句话说,我不知道我的屏幕内容的大小是多少,因为我从服务器获取数据。 如果你不明白问题,这里是代码片段:

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); 
}

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

按照库文档中的说明:

如果视图 controller 小于指定的尺寸,它只会增长到呈现视图 controller 的内部高度。 如果它更大,它将在初始化程序或 setSizes function 中指定的每个高度处停止。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM