以编程方式添加内容后调整 uiscrollview 的大小

Posted

技术标签:

【中文标题】以编程方式添加内容后调整 uiscrollview 的大小【英文标题】:Resize uiscrollview after adding content programmatically 【发布时间】:2018-10-12 16:57:35 【问题描述】:

我在 UIscrollview 中有一个带有 uielements 的 Contentview。下面是我的故事板的屏幕截图:

我想为应用程序添加选项,如果用户单击按钮,它将在内容视图的底部添加标签(在红色下划线标签下方 - dzialTerminOutlet)。

我正在使用以下代码以编程方式添加新标签:

let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false

label.backgroundColor = UIColor.orange
label.textColor = UIColor.black
label.textAlignment = NSTextAlignment.center
label.text = "test label"
contentView.addSubview(label)


label.topAnchor.constraint(equalTo: dzialTerminOutlet.bottomAnchor, constant: 10).isActive = true
label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 85.0)
label.widthAnchor.constraint(equalToConstant: 200.0)
label.heightAnchor.constraint(equalToConstant: 10.0)

虽然滚动视图不会调整大小。这里有什么问题?

【问题讨论】:

【参考方案1】:

1- 你需要激活

NSLayoutConstraint.activate([
  label.topAnchor.constraint(equalTo: dzialTerminOutlet.bottomAnchor, constant: 10),
  label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 85.0),
  label.widthAnchor.constraint(equalToConstant: 200.0),
  label.heightAnchor.constraint(equalToConstant: 10.0)
])

2- 您需要删除 IB 中在 dzialTerminOutletcontentView 之间建立的底部约束,以便能够插入新的约束并相应地调整 scrollView 的大小以避免它与

label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 85.0)

所以将它作为一个插座并停用它或在 contentView 中搜索底部约束并将其删除

【讨论】:

您的回答对我来说似乎很合乎逻辑。然而,在我禁用底部约束(dzialTerminBottomConstraint.isActive = false)后,滚动视图变短了 85 px。 设为 -85(负)【参考方案2】:

您是否将scrollView contentSize 设置为新尺寸? scrollView.contentSize = CGSize(宽度: self.contentView.frame.size.width, 高度: self.contentView.frame.size.height)

【讨论】:

【参考方案3】:

我经常使用它的一个非常简单的方法是将你的 contentView 高度约束与一个 IBOutlet 对象连接起来并更新它的值。

@IBOutlet weak var contentViewHeight : NSLayoutConstraint!

添加标签后:

contentViewHeight.constant += labelHeight

不要忘记使用滚动视图设置 contentView 约束(顶部、底部、前导、尾随)= 0

【讨论】:

以上是关于以编程方式添加内容后调整 uiscrollview 的大小的主要内容,如果未能解决你的问题,请参考以下文章

在 UIStackView 中以编程方式添加内容时的 UIScrollView 高度

Swift:以编程方式添加视图时,UIScrollView 的可滚动内容大小不明确,而不使用 IB

使用 UIScrollView 和 AutoLayout 以编程方式创建控制器无法正确调整视图大小

在 Swift 中以编程方式添加时,UIScrollView 根本不滚动?

用 UIScrollView 和故事板约束发疯

以编程方式将 UILabel 和 UIImageViews 添加到 UIScrollView