Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone scrollViewDidScroll在加载UIScrollView的第一页时被调用_Iphone_Objective C_Uiscrollview - Fatal编程技术网

Iphone scrollViewDidScroll在加载UIScrollView的第一页时被调用

Iphone scrollViewDidScroll在加载UIScrollView的第一页时被调用,iphone,objective-c,uiscrollview,Iphone,Objective C,Uiscrollview,我使用苹果的水平滚动纵向布局,一切正常,除了第一次加载UIScrollView时,显示的初始页面有 1) The first page offset by 11 pixels at location (11,0) or 2) The second page offset by 19 pixels at location (301,0) or 3) The second page offset by 65 pixels at location (255,0) or 4) The f

我使用苹果的水平滚动纵向布局,一切正常,除了第一次加载UIScrollView时,显示的初始页面有

 1)  The first page offset by 11 pixels at location (11,0) or
 2)  The second page offset by 19 pixels at location (301,0) or
 3)  The second page offset by 65 pixels at location (255,0) or
 4)  The first page offset by 81 pixels at location (81,0) or...
我的Xcode项目的总体结构是:

UITabBarController -> UITableView -> UIViewController containing UIScrollView
也就是说,选择UITabBarController上的选项卡将显示UITableView。在UITableView中选择单元格将显示一个包含UIScrollView的视图。首次显示此UIScrollView时会出现偏移问题

当UIScrollView首次加载时,scrollViewDidScroll似乎会被调用多次(34!),而在Apple的PageControl示例代码中,当UIScrollView首次加载时,scrollViewDidScroll不会被调用

加载UIScrollView后,UIScrollView工作正常,滚动结束时,帧边界上的页面以320的倍数显示。我的UIScrollview框架的宽度等于页数乘以320。我在UIView中有UIScrollView

答案是scrollViewDidScroll在每次滚动边界更改时都会被调用,但据我所知,我没有更改滚动边界;我将加载到UIScrollView中的每个ViewController的帧大小保持不变

我使用的是viewDidLoad,而不是苹果PageControl示例代码中的awakeFromNib。有人知道什么会导致:

 A)  scrollViewDidScroll to get called multiple times when UIScrollView first loads?
 B)  why scrollViewDidScroll would end on offsets that are not multiples of 320?
 C)  is the problem that UITableView contains a UIScrollView and so when transitioning
     from UITableVIew to UIScrollView some parameters in the UITableView are being
     used by the UIScrollView?

滚动视图的边界因每次滚动移动而改变。边界实际上是scrollview中当前可见的矩形

例如:

帧:{0,0320.0480.0} contentSize:{320.0,1000.0} contentOffset:{0,100.0}

边界将是:{0100.0320.0480.0}


因此,对于contentOffset的每次更改,边界都会更改。这会导致在滚动时不断调用LayoutSubView和didScroll。

我找到了解决方案。问题在于,在loadScrollViewWithPage中,我将ViewController添加到UIScrollView,然后修改ViewController。在我修改完控制器后,将添加的ViewController移动到loadScrollViewWithPage的末尾,问题就消失了。 因此,我将以下行移到loadScrollViewWithPage的末尾:

         [self.scrollView addSubview:controller.view];

让我向你们说明:

对于A)没错,当UIScrollView时,scrollViewDidScroll可能会被调用2次以上 第一批货

对于B)1:如果其结束偏移量不是320的倍数,您可能已经忘记或
设置错误的帧和内容变量时,应执行以下操作:

   myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width * testArray.count 
   ,myScrollView.frame.size.height/2);

   myScrollView.contentOffset = CGPointMake(0, myScrollView.frame.origin.y);

   2: Then for the custom view you want to add into scrollview, you should set its frame like:
   Customview : CGRectMake(n*myScrollView.frame.size.with, 0, myScrollView.frame.size.with, 
   myScrollView.frame.size.height)];

   That's to say, when the width of custom view is same  with your scrollview, you will get the effect that you want.

对于C)这是不对的,忘记这一点

我遇到的问题不是滚动,滚动效果很好,页面捕捉到320倍的帧边界。问题是,当UIScrollView首次加载时,第一页从320的倍数的帧边界移动。这就是第一个问题的答案。VIEWDID仅在设置滚动动画时正确滚动页面。如果没有动画,您可以将其设置为任何位置,并且它不会移动到320的倍数。如何使滚动动画化?setContentOffset:动画:是