【问题标题】:UIScrollView does not Scroll completelyUIScrollView 不完全滚动
【发布时间】:2015-07-10 06:04:31
【问题描述】:

我有一个 ViewController。在其中我将 ScrollView 与 View(contentView) 放在一起。后来我从 contentView 拖到 View 并设置 Equal Height。现在它会滚动,但不是完全滚动。

如您所见,它在 textView 下方继续,但它 不滚动。我该如何解决?

【问题讨论】:

  • 你设置scrollview的contentsize了吗?
  • @Leo 没有。我想自动做,但不知道怎么做。你能帮帮我吗?
  • 由于他使用的是自动布局,所以不需要设置 contentSize。您将 contentView 高度设置为等于视图高度,为什么要滚动?
  • @Poql 是不是方法不对?
  • @Poql 无论你是否使用自动布局,你都必须设置 contentSize 默认为 (0, 0)

标签: ios swift uiscrollview


【解决方案1】:

UIScrollView 能够自动计算它的内容高度和宽度,但你需要帮助它。 为此,您需要:

  1. contentView(在您的情况下)绑定到superview(即Scroll View)的所有侧面。
  2. contentView 计算它的大小。这是您方法中的一个小错误。您已将contentView 的高度设置为等于View 的高度。所以基本上Scroll View 的 contentSize.height 和View 的高度是一样的。这并不是您真正想要的动态内容。

通常您希望将contentView 的宽度设置为等于View 的宽度,而不设置contentView 的高度。相反,您希望将 contentView 的子视图绑定到它们的父视图,这样它们的父视图 (contentView) 会自动计算它的高度。

在你的情况下,我会绑定:

  • pizza.jpg 到 superview 的左上角(pizza.jpg 的高度将从固有图像大小设置);
  • SAMPLE TITLE label - 左右到superview;顶到pizza.jpg图片;
  • Text View - 左下右超级视图;顶部到SAMPLE TITLE 标签;设置固定高度。

在这种情况下,contentView 将自行定义所需的高度。 Scroll View 将相应地设置它的 contentSize。 而且您的屏幕将能够垂直滚动(应该是);)

【讨论】:

  • 研究几个小时后的正确答案。你拯救了我的一天。关键是,设置最底部的底部约束到内容视图的底部。
【解决方案2】:

您需要设置滚动视图的内容大小。使用下面的代码来做到这一点:

func viewDidLayoutSubviews()
{
    super.viewDidLayoutSubviews()
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.contentView.frame.size.height);

}

【讨论】:

  • 它对我没有帮助。我是否必须删除我的约束 - 等高?我删除它,它根本不滚动
  • @OrkhanAlizade 对于 contentView,您只需将约束透视设置为滚动视图。上 = 下 = 左 = 右 = 0
【解决方案3】:

AutolayoutUIScrollView 一起使用很棘手。

在您的代码中,您必须通过计算 contentViewsubviews 的高度来更新 contentView 的高度约束,这将自动为您的 ScrollView 更新 contentSize,您可以滚动浏览所有子视图。

有关使用Autolayout+UIScrollView的更多信息,您可以阅读this

【讨论】:

    【解决方案4】:

    根据this link(感谢this Matt's answer first),UIScrollView 在 AutoLayout 中的行为与其他视图不同。

    scrollView 的子视图从scrollView 的contentView 而不是直接从scrollview 设置它们的约束。这允许内容滚动。

    所以:

    1. 为你的scrollView添加一个UIView,这将代表你scrollView的contentView。将约束添加到顶部、底部、尾部、从视图到其超级视图的前导
    2. 界面生成器抱怨。在这里您可以看到基本视图和滚动视图之间的区别。原因是 contentView 必须被填充才能知道它的大小。所以从 contentView 添加一个相等的宽度到 scrollView
    3. contentView 现在知道它的宽度但不知道它的高度。因此,将您的标签和 UIImage 添加为 contentView 的子视图。从底部到顶部添加约束。不要错过为 UIImageView 添加高度约束。

    应该是这样的:

    希望对你有帮助

    阅读this (from Matt once again)了解更多信息

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 1970-01-01
      • 2020-08-22
      • 2013-11-15
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多