UIScrollView:内部视图不适合,奇怪的行为,视图快照触摸

时间:2015-11-28 01:26:38

标签: ios swift uiviewcontroller uiscrollview

我在使用UIScrollView时遇到了麻烦...我已经研究了很多并且发现了类似的案例,但解决方案似乎从来没有用过,所以这里有一点解释(这很难解释)

我有一个包含UIScrollView的viewcontroller,我在uiscrollview中加载了几个视图控制器...我安装它们然后我将它们添加到scrollView中......

viewController1.view.frame = scrollView1.bounds
var frame0 = viewController1.view.frame
frame0.origin.x = 0
viewController1.view.frame = frame0

self.addChildViewController(viewController1)
self.scrollView1.addSubview(viewController1.view)
viewController1.didMoveToParentViewController(self)

viewController2.view.frame = scrollView1.bounds
var frame01 = viewController2.view.frame
frame01.origin.x = self.view.frame.size.width
viewController2.view.frame = frame01

self.addChildViewController(viewController2)
self.scrollView1.addSubview(viewController2.view)
viewController2.didMoveToParentViewController(self)

...

之后我按如下方式配置滚动视图

self.scrollView1.contentSize  = CGSizeMake(self.view.frame.width * 5, self.view.frame.height)
scrollView1.delaysContentTouches = false

时间5因为有5个ViewControllers

(滚动视图启用了分页)

现在这个方法效果很好,并且所有视图都在滚动视图中加载,我可以通过我的视图滑动,但这是问题所在。 我的第一个视图加载正常,然后当我向右滑动时,我看到第二个视图偏移到顶部,其中一部分被隐藏,然后当我触摸视图内的一个按钮时,它突然陷入其中的底部这...真的很烦人,因为它使用户界面真的很烦人,因为它的一部分是隐藏的......

我举了一个例子:http://imgur.com/xHRwXt4

我尝试了很多设置

self.automaticallyAdjustsScrollViewInsets = false

self.scrollView1.clipsToBounds = true

但仍然会出现同样的问题。我也认为它是我的导航栏,因为包含scrollview的视图位于具有导航栏的ViewController内(来自uinavigationcontroller)

因此,出于测试目的,我在没有导航控制器和条的情况下尝试了它,但仍然发生了同样的问题。这真的令人沮丧,我似乎无法找到解决方案。

但是我必须说滚动视图位于带有navigationBar的ViewController内部并且我设置

self.scrollView1.contentSize  = CGSizeMake(self.view.frame.width * 5, self.view.frame.height - 66) 

(注意-66) 然后没有发生捕捉问题,但这不是我想要的效果,因为scrollview需要填满整个视图,UIScrollView内的视图也不完全可见然后这不是一个解决方案任

我也教过它可能是因为我在我加载的一个视图控制器上设置了不同的约束,所以我尝试启动相同类型的视图控制器几次仍然出现同样的问题......

(所以我已经尝试了很多,但无论我尝试做什么都会变得更糟或者每个视图向任一方向移动会发生另一个问题然后我添加self.automaticallyAdjustsScrollViewInsets = false但是然后捕捉返回等等)

希望有人有一些建议来解决这个问题 (如果我需要更多插图等,那么我也会提供这些插图。)

谢谢

1 个答案:

答案 0 :(得分:0)

从外观上看,有两件事要尝试:

  1. 某些子视图控制器可能包含滚动视图,并且需要设置除父视图控制器以外的其他selfAdjustsScrollViewInsets = false
  2. 找出一个非常有用的方法是打开视图调试。运行项目,然后转到Xcode>查看调试>显示视图框架。查看子视图控制器的子视图是否在顶部未对齐。如果它们正确对齐(顶部全部刷新),则表示问题在于各个子视图。