在 UIScrollView (Swift) 中使用动态内容调整 UiView 高度

Posted

技术标签:

【中文标题】在 UIScrollView (Swift) 中使用动态内容调整 UiView 高度【英文标题】:Resizing UiView Height With Dynamic Content in UIScrollView (Swift) 【发布时间】:2015-05-22 14:44:20 【问题描述】:

我在 UIScrollView 中有 UIView 并已从 Interface Builder 连接它们:

@IBOutlet weak var articleScroll: UIScrollView!
@IBOutlet weak var articleSubview: UIView!

我有动态内容进入 UIView,我希望将其高度绘制为与内容一样大(以便滚动)。我认为使用 .last 结合内容的高度来查找 origin.y 就可以了:

var scroll = self.articleSubview
var lastItem = scroll.subviews.last as! UIView
var lastOriginY = lastItem.frame.origin.y
var lastHeight = lastItem.frame.size.height
var finalHeight = lastOriginY+lastHeight

    scroll.frame = CGRectMake(0 , 0, lastItem.frame.size.width, finalHeight)

构建成功,但没有滚动。我尝试添加:

articleScroll.userInteractionEnabled = true

但这并没有什么不同。我做错了什么?

更新:

已经解决了。实际的滚动视图必须调整大小,而不是子视图。不要使用 scroll.frame,而是 UIScrollView 上的“contentSize”是要走的路。:

self.articleScroll.contentSize = CGSizeMake(lastItem.frame.size.width, finalHeight)

【问题讨论】:

你了解滚动视图的contentSize吗? @matt,你告诉我我犯错的地方。我应该调整滚动视图的大小而不是内容。呃...请给出答案,我会接受。谢谢! 当然,很高兴我能够引导您朝着正确的方向前进。添加它作为答案。 【参考方案1】:

UIScrollView 的可滚动性(是一个词吗?)取决于其contentSize 与其边界大小的关系。这个想法是让contentSize 接受内容;如果它大于滚动视图的边界大小,则用户可以滚动。

您的代码没有在任何地方设置contentSize。它需要!

【讨论】:

【参考方案2】:

调整滚动大小,滚动视图有一个名为scroll.scrollRectToVisible(<rect: CGRect>, animated: <Bool>) 的方法 滚动到框架。

【讨论】:

以上是关于在 UIScrollView (Swift) 中使用动态内容调整 UiView 高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使这个 UITableView 清晰(透明)

如何在 Swift 中使按钮具有圆形边框?

如何在swift 4中使图像视图变圆

在 Swift 中使 NavigationBar 子视图可点击

如何在 Swift 中使状态栏标题颜色为白色? [复制]

在 Swift 中使用以函数为参数的 C 函数