UIScrollView底部的UIButtons无法正常工作

时间:2015-01-25 08:10:33

标签: ios iphone swift uiscrollview uibutton

我在我的故事板中创建了一个UIScrollView,并在容器View中添加了12个UIButtons,它位于UIScrollView中。

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

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

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

我正在使用自动布局。

我试过摆弄UIScrollView的contentSize并没有帮助。

7 个答案:

答案 0 :(得分:36)

似乎你需要增加容器视图的框架高度。 scrollView的contentSize仅影响它的滚动方式,这与此无关。

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

答案 1 :(得分:4)

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

要使您的内容视图扩展它的高度,您需要添加一个高度约束,然后将其分配到插座,以便您可以轻松地在代码中操纵它的值。然后将内容视图的高度约束优先级设置为1000(" required")并将内容视图"等宽度设置为:view"约束优先级为750(高)。

答案 2 :(得分:3)

对我而言,只需取消选中该ViewController故事板中的调整滚动视图插入复选框。

enter image description here

PS:上述答案对我没有用。

答案 3 :(得分:3)

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

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

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

enter image description here

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

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

(UIDevice.current.isSmallDevice是对UIDevice扩展的调用,返回由屏幕大小决定的bool)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

like  Scroolview -> ContainerView--> UIButtons

答案 6 :(得分:0)

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