以编程方式在 UIScrollView 中居中子视图
Posted
技术标签:
【中文标题】以编程方式在 UIScrollView 中居中子视图【英文标题】:Centering a sub view in UIScrollView programmatically 【发布时间】:2017-10-01 07:56:15 【问题描述】:我在 SO 上看到一堆类似的问题,但没有一个能解决我的问题。
我正在添加一个UIView
作为UIScrollView
的子视图。 UIView
有 3*scrollView.width 和 3*scrollView.height。所以我相应地设置了UIScrollView
的contentSize
。当应用程序启动时,我希望 scrollView
窗口位于 subView
的中间,类似这样 --
-------------------
| |
| ________ |
| | | |
| | | |
| ------- |
| |
-------------------
内部窗口应该是scrollView
,也是用户在应用启动时看到的UIView
的一部分。但是,我无法做到这一点。
scrollView
始终设置为原点 (0,0)
我这样做了 -
let margins = view.layoutMarginsGuide
scrollView.leftAnchor.constraint(equalTo: margins.leftAnchor).isActive = true
scrollView.rightAnchor.constraint(equalTo: margins.rightAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: 0).isActive = true
scrollView.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
scrollView.center = self.view.center // view is the base view of which scrollView is a subview of.
subView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: -1*scrollView.frame.width)
subView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: -1*scrollView.frame.height)
【问题讨论】:
【参考方案1】:据我了解,您在其中有 UIScrollView
和 UIView
并滚动内容大小为视图高度/宽度的 3 倍,当应用启动时,您需要滚动的中心。
在这种情况下,我尝试使用情节提要尽可能地关闭,所以我做了什么,
-
添加了
UIScrollView
和约束
Top
空间到 SuperView,Trailing
到 SuperView,Leading
和 Bottom
到 superView。
-
在
UIScrollView
内添加了 UIView
并带有约束。
Top
空间到 SuperView,Trailing
到 SuperView,Leading
和 Bottom
到 superView 与 Height and Width
等于 UIView (that we have on top of UIScrollView)
,乘数为 3。
这就是故事板的全部内容,现在我们唯一需要设置的就是setContentOffset
为UIScrollView
像这样。
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
let contentOffsetX = (scrollView.contentSize.width/2) - (view.bounds.width/2)
let contentOffsetY = (scrollView.contentSize.height/2) - (view.bounds.height/2)
scrollView.setContentOffset(CGPoint(x: contentOffsetX, y: contentOffsetY), animated: true)
我们完成了。我希望它会帮助你。 你也可以在Github.com找到代码库
快乐学习。
【讨论】:
啊,谢谢。我需要在 scrollView 上正确设置 contentOffset。那就是解决我的问题。非常感谢您花时间在 github 上发布代码。以上是关于以编程方式在 UIScrollView 中居中子视图的主要内容,如果未能解决你的问题,请参考以下文章
在具有较大 contentSize 的 UIScrollView 中居中 UIImageView