以编程方式添加内容后调整 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 中在 dzialTerminOutlet
和 contentView
之间建立的底部约束,以便能够插入新的约束并相应地调整 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 以编程方式创建控制器无法正确调整视图大小