UIScrollView没有滚动UItextfields

时间:2016-05-11 07:51:15

标签: ios objective-c uiscrollview uitextfield

我正在制作一个普通视图,用户可以在其中更新其个人资料。我按照这些步骤制作了该视图

  
      
  1. 使用xib文件
  2. 创建了一个新的UIViewController   
  3. 在超级视图中添加了UIScrollView
  4.   
  5. 添加了近9个UITextField和1个小UIWebView
  6.   
  7. 顶级UITextField等满意的Autolayout限制将具有顶部,左侧,右侧和高度限制,并且对于以下所有内容都相同   控件但最后UITextField有顶部,左侧,右侧,底部和高度   约束
  8.   

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

  

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

上提供了一个示例项目

4 个答案:

答案 0 :(得分:2)

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

  根据Apple touchesShouldCancelInContentView之前的调用   如果触摸已经传递到子视图,则滚动开始   滚动视图。如果它返回NO,则触摸将继续   传递到子视图并且不会滚动。

默认情况下,如果view为UIControl,则此方法返回NO。因此,UIControls不会发生滚动。

如果我们从此方法返回YES,则触摸将不会传递到子视图,因此将进行滚动。

所以覆盖UIScrollView touchesShouldCancelInContentView,如下所示

@interface MyScrollView : UIScrollView

@end

@implementation MyScrollView

- (BOOL)touchesShouldCancelInContentView:(UIView *)view{
    return YES;
}

@end

注意:touchesShouldCancelInContentView方法仅在我们将canCancelContentTouches属性设置为YES

时才会调用

希望这有帮助。

答案 1 :(得分:1)

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

  

注意:

     
      
  • 为UIView w.r.t提供约束。 UIScrollView作为前导,尾随,顶部,底部和相等宽度。

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

  •   
  • 将UIView底部w.r.t UIScrollView的约束自定义为0。

  •   

请参阅:enter image description here

答案 2 :(得分:0)

为UIScrollView将delayContentTouchesProperty设置为YES。如果您触摸UIScrollView的内容,这将允许您滚动。 您可以通过编程方式或从故事板中执行此操作。

答案 3 :(得分:0)

你应该在uiscrollView上使用uiview作为超级视图,将所有文本字段放在uiview上,并确保在uiview上对uiscrollView应用所有令人满意的约束。