我在我的故事板中创建了一个UIScrollView,并在容器View中添加了12个UIButtons,它位于UIScrollView中。
在iPhone 5s模拟器上运行时,屏幕上可以看到9个按钮,向下滚动时只能看到其余的按钮。
可以在屏幕上初次看到的9个按钮可以与之交互。但是滚动视图底部的3个按钮(必须滚动才能看到)无法与之交互。
我在iPhone 6模拟器上运行该应用程序,该模拟器显示屏幕上的所有12个按钮,无需滚动,底部3个按钮可用。
我正在使用自动布局。
我试过摆弄UIScrollView的contentSize并没有帮助。
答案 0 :(得分:36)
似乎你需要增加容器视图的框架高度。 scrollView的contentSize
仅影响它的滚动方式,这与此无关。
如果按钮位于容器视图之外,它仍会显示。但是,它无法响应任何触摸事件。
答案 1 :(得分:4)
在故事板中使用自动布局的scrollview时。它通常使用滚动视图内的内容视图进行设置,该内容视图将包含所有其他视图(例如按钮,标签等),内容视图通常设置为具有相等的高度和相等的宽度。
要使您的内容视图扩展它的高度,您需要添加一个高度约束,然后将其分配到插座,以便您可以轻松地在代码中操纵它的值。然后将内容视图的高度约束优先级设置为1000(" required")并将内容视图"等宽度设置为:view"约束优先级为750(高)。
答案 2 :(得分:3)
答案 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模拟器上的按钮。
注意:我仍在检查设备大小,并在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)