iOS中自定义对话框的动态高度
我正在尝试创建一个自定义对话框,其中包含UITableView。 我想要达到的是尽可能低的高度,这意味着它应该只包装tableview。iOS中自定义对话框的动态高度,ios,swift,uitableview,dialog,Ios,Swift,Uitableview,Dialog,我正在尝试创建一个自定义对话框,其中包含UITableView。 我想要达到的是尽可能低的高度,这意味着它应该只包装tableview。 但是当tableview有太多的项目时(意味着它的高度比屏幕大),我希望对话框从屏幕顶部和底部有20像素的边距。 因此,如果tableview有2个项目,则对话框的高度应为20 px。但是,如果tableview有200个项目,对话框的高度应该几乎占整个屏幕的高度,并且其内容可以滚动。 当前,如果tableview有多个项目,我只能看到一些项目,对话框的顶部
但是当tableview有太多的项目时(意味着它的高度比屏幕大),我希望对话框从屏幕顶部和底部有20像素的边距。
因此,如果tableview有2个项目,则对话框的高度应为20 px。但是,如果tableview有200个项目,对话框的高度应该几乎占整个屏幕的高度,并且其内容可以滚动。
当前,如果tableview有多个项目,我只能看到一些项目,对话框的顶部和底部消失。
谢谢。
编辑:我忘了提到我只打算使用故事板,使用约束和改变内容拥抱和压缩的优先级来实现这一点 我猜您在显示对话框之前知道有多少项,并且我猜您的对话框是一个自定义视图(xib) 如果这个前提是真的,你可以通过这条线来解析
let dialog = CustomDialog(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: (heighCell * elements) + (heightButtonClose) + (heighTitle))
dialog.center = self.view.center
如果您有疑问,请告诉我您需要动态设置tableView高度,因此请为其设置两个位置约束(即centerX、centerY)、固定宽度约束,然后将高度约束设置为某个任意常量(0)。取一个出口到高度约束。每当您更新支持tableview的数据时,都需要计算出的tableview高度和superview高度的
min
,并将高度约束常量设置为该值,然后在tableview的superview上调用setNeedsLayout。这样,tableview要么是其内容的高度,要么是内容太大,则是superview的高度,然后滚动
tableViewHeightConstraint.constant = min(superview?.bounds.size.height ?? 0, numberOfCells * heightPerCell + headerAndFooterSize)
superview?.setNeedsLayout()
我的回答将包括几个部分。他们正在解决一个更普遍的问题,即如何有效地使用对话
我所要做的就是将顶部和底部约束从“=”更改为“>=”。 因此,现在它允许对话框具有较小的高度,但不大于屏幕。不需要代码。
谢谢大家的帮助。谢谢大家的帮助。我还没有尝试过用编程的方式来实现它,我希望通过故事板来实现这一点。我猜这可以通过使用约束和更改内容拥抱和压缩的优先级来实现。谢谢您的帮助。我已经有了一个tableview高度的outlet变量,我会根据我拥有的项目数量进行更新。我希望我可以在故事板中使用约束来实现这一点。如果你想在不触及高度约束的情况下实现这一点,那么你不需要设置任何大小约束。然后,系统使用视图的
intrinsicContentSize
计算其高度和宽度约束。您将需要子类化UITableView
并覆盖intrinsicContentSize
,并且每当项目数量发生变化时,仍需要使布局无效;我认为使用我上面提供的解决方案更容易。