【问题标题】:UIScrollView not scrolling with UItextfieldsUIScrollView 不使用 UItextfields 滚动
【发布时间】:2016-09-06 11:31:42
【问题描述】:

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

  1. 使用 xib 文件创建了一个新的UIViewController
  2. 在超级视图中添加了UIScrollView
  3. 添加了近 9 个 UITextField 和 1 个小 UIWebView
  4. 满足自动布局约束,如顶部 UITextField 将具有顶部、左侧、右侧和高度约束,以下所有约束都相同 控件,但最后一个 UITextField 有顶部、左侧、右侧、底部和高度 约束。

现在所有约束都已应用并得到满足,但是当我运行视图然后尝试通过拖动 UITextField 滚动时,scrollview 不会滚动,但如果我通过从 UITextField 以外的某个区域拖动来滚动,那么它正在滚动很不错。谁能告诉我主要问题是什么?

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

【问题讨论】:

  • 你能提供一个示例项目吗?
  • @SuryaSubenthiran 我尝试了该解决方案但徒劳无功。
  • @arturdev 示例项目添加
  • @Mashhadi 在您的演示项目中,在 9.3 模拟器上一切正常

标签: ios objective-c uiscrollview uitextfield


【解决方案1】:

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

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

默认情况下,如果视图是UIControl,则此方法返回 NO。所以 UIControls 不会发生滚动。

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

所以像下面这样覆盖 UIScrollView touchesShouldCancelInContentView

@interface MyScrollView : UIScrollView

@end

@implementation MyScrollView

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

@end

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

希望这会有所帮助。

【讨论】:

  • 我按照这些步骤操作,但仍然没有调用 touchesShouldCancelInContentView 方法
  • 您是否在身份检查器中提到了 MyScrollView 类。
  • 确保在情节提要属性检查器中为滚动视图勾选了“可取消的内容触摸”属性。
  • 我是从属性检查器中完成的,然后也是从代码中完成的。
【解决方案2】:

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

注意:

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

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

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

见:

【讨论】:

  • 现在试过了,还是没有成功
  • 它应该可以工作,我的工作..!你现在遇到了什么问题?
【解决方案3】:

将 UIScrollView 的 delayContentTouchesProperty 设置为 YES。如果您触摸 UIScrollView 的内容,这将让您滚动。 您可以通过编程或情节提要来完成。

【讨论】:

  • 在我的原始项目中,我使用的是 XIB,我打开了它但仍然没有运气
  • 尝试移除 textFields 的高度限制
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2013-07-02
    相关资源
    最近更新 更多