UIScrollView 底部的 UIButtons 不起作用

UIButtons at the bottom of UIScrollView not working

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

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

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

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

我正在使用自动布局。

我试过调整 UIScrollView 的 contentSize,但没有用。

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

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

对我来说,这只是 取消选中 ViewController 故事板中的 调整滚动视图插入 复选框。

PS: 以上答案对我无效。

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

为了让您的内容视图扩展它的高度,您需要添加一个高度约束,然后将它分配给一个插座,这样您就可以在您的代码中轻松地操纵它的值。然后将内容视图的高度约束优先级设置为 1000 ("required") 并将内容视图的 "equal width to:view" 约束优先级设置为 750(高)。

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

另一种选择是降低内容 View.Center Y 约束的优先级。

在 Xcode 9 中,我根据需要布置了 contentView,并在 iPhone 5 上将按钮扩展到视图下方。我动态调整了 scrollView.contentSize.height 和 [=26= 的大小] 在视图控制器中。 scrollView 为我滚动了,但我仍然无法 select 按钮并且在 Storyboard 中看到警告。

一旦我降低了 contentView 的中心 Y 对齐约束的优先级,Storyboard 中的警告就消失了,我能够滚动到 scrollView 的底部和 select [=29] 上的按钮=] 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 扩展的调用,returns 一个由屏幕尺寸决定的布尔值)

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

like  Scroolview -> ContainerView--> UIButtons
  1. 为 contentView 添加高度限制。
  2. 将 center Y 到 superview 的优先级降低到 250
  3. 将 bottom space 到 superview 的优先级降低到 250
  4. 在代码中通过设置高度约束常量值增加contentView的高度