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

问题描述 投票:0回答:1

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

但我认为这不是正确的解决方案,而且实际上并不成功。那么,有什么最好的方法来解决我的问题?如何显示底层页面的高度等于内容的高度?

ios swift uiviewcontroller autolayout bottom-sheet
1个回答
1
投票

按照库文档中的解释。

如果视图控制器比指定的尺寸小,它将只增长到视图控制器的固有高度。如果它更大,它将停止在初始化器或setSizes函数中指定的每个高度。

因此,你可以删除你在 viewDidAppear 而只是增加了一个尺寸数组,其中第一个尺寸是决定纸张初始尺寸的数组,例如。

present(SheetViewController(myViewController, sizes: [.fixed(100), .fullScreen]), animated: false)
© www.soinside.com 2019 - 2024. All rights reserved.