【问题标题】:UIButtons at the bottom of UIScrollView not workingUIScrollView 底部的 UIButtons 不起作用
【发布时间】:2015-03-23 22:37:56
【问题描述】:

我在我的故事板中创建了一个 UIScrollView,并在 UIScrollView 内的容器视图中添加了 12 个 UIButton。

在 iPhone 5s 模拟器上运行时,屏幕上可以看到 9 个按钮,其余按钮只有向下滚动才能看到。

最初可以在屏幕上看到的 9 个按钮可以与之交互。但是,滚动视图底部的 3 个按钮(必须滚动到才能看到)无法交互。

我在 iPhone 6 模拟器上运行该应用程序,该模拟器无需滚动即可在屏幕上显示所有 12 个按钮,并且底部 3 个按钮可以工作。

我正在使用自动布局。

我曾尝试摆弄 UIScrollView 的 contentSize,但它没有帮助。

【问题讨论】:

  • 显示添加按钮的代码。
  • UIScrollView 的(或容器视图的)框架可能不是您所期望的。确保将其设置为剪辑子视图并再次运行。
  • @Rashad 我通过情节提要添加了按钮
  • @Stavash 我尝试将其 clipsToBounds 值更改为 true 并再次运行应用程序,但没有任何改变

标签: ios iphone swift uiscrollview uibutton


【解决方案1】:

看来你需要增加容器视图的框架高度。 scrollView 的contentSize 只影响它的滚动方式,这里无关紧要。

如果按钮在容器视图之外,它仍然会显示。但是,它无法响应任何触摸事件。

【讨论】:

  • 成功了!谢谢,不知道容器视图高度和 scrollView 的 contentSize 是两个不同的东西
  • @WesleyOw 不客气。你能好心点赞并接受这个答案吗?
  • 我也有同样的问题。但我不确切知道我必须增加哪个框架高度:我有标准视图和滚动视图,里面有一个容器视图,还有这个容器视图里面的按钮。我增加了滚动视图的高度以容纳所有内容(具有动态高度),但内部容器视图的增加没有任何效果。似乎它甚至被忽略了。我该怎么办?
  • 有同样的问题,但无法修复,直到我将contentView 删除到我的scrollView 底部
  • 我们如何以编程方式完成?
【解决方案2】:

在带有自动布局的情节提要中使用滚动视图时。它通常使用滚动视图内的内容视图进行设置,该视图将包含所有其他视图(例如按钮、标签等)。内容视图通常设置为具有相等的高度和相等的宽度。

要让你的内容视图扩展它的高度,你需要添加一个高度约束,然后将它分配给一个出口,这样你就可以在你的代码中轻松地操纵它的值。然后将内容视图的高度约束优先级设置为 1000(“必需”),并将内容视图的“等于:视图”约束优先级设置为 750(高)。

【讨论】:

    【解决方案3】:

    对我来说,只需取消选中该 ViewController 的情节提要中的复选框 Adjust Scroll View Insets

    PS:以上答案对我不起作用。

    【讨论】:

    【解决方案4】:

    另一个选项是降低 Content View.Center Y 约束的优先级。

    在 Xcode 9 中,我根据需要布置了 contentView,并在 iPhone 5 的视图下方扩展了按钮。我在视图控制器中动态调整了 scrollView.contentSize.height 和 contentView.frame 的大小。 scrollView 为我滚动,但我仍然无法选择按钮,并且在情节提要中看到警告。

    一旦我降低了 contentView 的 Center Y Alignment Constraint 的优先级,Storyboard 中的警告就消失了,我能够滚动到 scrollView 的底部并选择 iPhone 5 模拟器上的按钮。

    注意:对于小型设备,我仍在检查设备大小并调整 viewWillLayoutSubviews() 中的 scrollView.contentSize.height 值。

    override func viewWillLayoutSubviews() {
            super.viewWillLayoutSubviews()
            scrollView.contentSize.height = (UIDevice.current.isSmallDevice) ? 560 : contentView.frame.size.height
        }
    

    (UIDevice.current.isSmallDevice 是对 UIDevice 扩展的调用,它返回一个由屏幕大小决定的布尔值)

    【讨论】:

    • 您尝试了多少次得到这个答案?在 2 f***** 天之后。找到了这个答案。谢谢你。
    • @PhilipBorbon 哈哈!这肯定是一个艰难的过程。一旦我确定这不是我的代码,我就查看了视图层次结构 (developer.apple.com/library/archive/documentation/…) 并意识到该按钮不在 scrollView 内容中,因为 scrollView 的大小不正确(尽管它似乎在模拟器!)。如果我没有与一些非常优秀的开发人员一起工作来为我指明正确的方向,那么这对我来说也是 2 天。事实上,还有几个小时!
    【解决方案5】:

    将容器中的所有子视图添加到 ScrollView。并隐藏容器。确保容器(滚动视图的容器视图)也应该是滚动视图的子视图。

    【讨论】:

      【解决方案6】:

      只需增加容器视图的高度,容器视图必须是滚动视图的子视图,所有其他子视图都是容器视图的一部分。

      like  Scroolview -> ContainerView--> UIButtons
      

      【讨论】:

        【解决方案7】:
        1. 向 contentView 添加高度约束。
        2. 将中心 Y 对 superview 的优先级降低到 250
        3. 将底部空间对superview的优先级降低到250
        4. 通过设置高度约束常量值来增加代码中contentView的高度。

        【讨论】:

          猜你喜欢
          • 2017-03-29
          • 1970-01-01
          • 1970-01-01
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 2015-10-25
          • 1970-01-01
          • 2015-12-02
          相关资源
          最近更新 更多