UIScrollView不滚动UItextfields

我正在用户可以更新他们的configuration文件的正常看法。 我遵循这些步骤来expression这种观点

  1. 用xib文件创build一个新的UIViewController
  2. 在超级视图中添加了一个UIScrollView
  3. 新增了近9个UITextField和1个小UIWebView
  4. 像上面的UITextField一样满足的Autolay约束将有顶部,左边,右边和高度约束,对于所有下面的控件都是一样的,但是最后一个UITextField有顶部,左边,右边,底部和高度约束。

现在所有的约束都被应用和满意,但是当我运行视图,然后尝试通过拖动UITextField滚动然后滚动视图不滚动,但如果我通过从UITextField以外的某个区域拖动滚动,那么它滚动非常好。 有人可以告诉我什么是主要问题?

注意:除了设置xib文件之外,还没有代码。 示例项目位于此链接https://www.dropbox.com/s/7oqry8yzd9twnp1/TestScroll.zip?dl=0

重写UIScrollView touchesShouldCancelInContentView方法将解决这个问题。

根据苹果touchShouldCancelInContentView被称为滚动开始之前,如果触摸已被传递到滚动视图的子视图。 如果返回NO,则触摸将继续传递给子视图,滚动不会发生。

默认情况下,如果view是一个UIControl这个方法返回NO。 所以UIControls不会发生滚动。

如果我们从这个方法返回YES,那么触摸将不会被传递给子视图,所以滚动将会发生。

所以重写UIScrollView touchesShouldCancelInContentView就像下面这样

 @interface MyScrollView : UIScrollView @end @implementation MyScrollView - (BOOL)touchesShouldCancelInContentView:(UIView *)view{ return YES; } @end 

注: touchesShouldCancelInContentView方法只有在将canCancelContentTouches属性设置为YES时才会调用

希望这可以帮助。

您需要为ScrollView中的所有文本字段添加额外的父视图。

注意:

  • 为UIView提供UIScrollView作为Leading,Trailing,Top,Bottom和Equal Width的约束。

  • 另外不要忘记添加UIView中的最后一个对象的底部约束与UIView(自定义它大约30,因为它将不会完成内容后滚动很多)。

  • 将UIView底部的UIScrollView的约束自定义为0。

看到: 在这里输入图像说明

为UIScrollView设置delayContentTouchesProperty为YES。 这将让你滚动,如果你触摸UIScrollView的内容。 您可以通过编程或故事板来完成。

你应该在uiscrollView上使用uview作为superview,把所有的textfield放在uiview上,并且确保你在uview上应用了所有满意的约束。