以编程方式在UIScrollView中居中子视图

时间:2017-10-01 07:56:16

标签: ios swift uiview uiscrollview

我在SO上看到了许多类似的问题,但没有一个可以解决我的问题。

我正在添加UIView作为UIScrollView的子视图。 UIView有3 * scrollView.width和3 * scrollView.height。所以我相应地设置contentSize的{​​{1}}。当应用程序启动时,我希望UIScrollView窗口位于scrollView的中间,类似这样 -

subView

当应用启动时,内部窗口应该是 ------------------- | | | ________ | | | | | | | | | | ------- | | | ------------------- 以及用户看到的scrollView部分。然而,我无法实现它。 UIView始终设置为origin(0,0)

我这样做了 -

scrollView

1 个答案:

答案 0 :(得分:1)

根据我的理解,你内部有UIScrollViewUIView,内容大小为视图高度/宽度的3倍滚动,当应用启动时,你需要滚动的中心。

在这种情况下,我尝试使用故事板尽可能多地关闭,以便我做了什么,

  1. 添加了UIScrollView约束
  2. Top空间到SuperView,Trailing到SuperView,LeadingBottom到superView。

    1. UIView内添加UIScrollView约束。
    2. Top空间到SuperView,Trailing到SuperView,LeadingBottom到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

      找到代码库

      快乐学习。