Xcode / Swift滚动视图布局过宽

3

我是一个小组的一份子,正在开发一个应用程序,该应用程序使用自动布局适配了iPhone 6,但我们刚刚发现我们还需要支持iPhone 4s和5。因为布局是为6的更大屏幕设计的,所以我们决定使用ScrollViews。

我用这个视频作为教程:

UIScrollView and Autolayout - Xcode 6

在大部分情况下,它可以工作。我可以上下滚动。

问题:

垂直滚动有效。但现在我也必须水平滚动,这不是理想的/不应该发生。

即使模拟器设置为iPhone 6,任何带有scrollview的东西都会被放大到用户必须横向滚动的程度。

有什么建议吗?

我尝试过的:

应用程序的某些部分可以完美地运行,但我尚未将scrollview应用于其中任何一个,因此很难确定是scrollview的问题还是其他问题。不过我确实找到了这个:

不起作用(使用scrollviews-可以向下滚动,但宽度被放大):
enter image description here

工作(未使用scrollviews-无法向下滚动,但UI与屏幕宽度匹配):
enter image description here

我不知道那是否真的有所不同。我试图将大小设置为任何/任何,但这会破坏现有的自动布局约束。

我还尝试了以编程方式实现它,但系统返回错误的屏幕大小(这会使一切更加糟糕)。


一个有效的问题。每当我为不同的方向创建ScrollView + Autolayout时,我都会遇到类似的问题。我已经解决了它们,但仍然不知道具体如何解决,因为这是通过反复试错完成的。如果有人知道答案,我也很感兴趣。 - devim1
滚动视图真的很难处理。我不得不通过谷歌搜索UIScrollView教程来弄清楚如何很好地实现它们。 - rigdonmr
@rigdonmr,我使用的教程视频在上面链接了。奇怪的是,我之前在另一个项目中使用过它,就我记得,并没有出现这样的问题 - 而且视频中使用的是iPhone进行测试。 - zack_falcon
@srvv,是的。其余部分应该压缩到指定宽度 - 在没有滚动视图的情况下也可以实现这一点。 - zack_falcon
2
只是为了以后参考,与其他视图不同,将滚动视图的顶部、右侧、底部和左侧的视图约束常量设置为0并不会将内容大小设置为滚动视图边界的大小。嵌入子视图的宽度才是内容大小。作为一个实验,您可以将内容视图的宽度设置为滚动视图宽度的3倍,并将边缘约束的常量设置为0。通常这会导致冲突,但对于滚动视图的子视图来说却不会。 - funct7
显示剩余3条评论
1个回答

10
在使用 ScrollView 和 AutoLayout 时,您应该将所有内容放在一个 content view(UIView)中并将其固定到 scroll view 上。(我假设您已经这样做了)
现在,如果您想禁用水平滚动(就像在 TableView 中一样),那么您需要在 scroll view 和 content view 之间添加一个等宽约束。

哇!谢谢!这就搞定了! - zack_falcon
以下是一些用于此目的的Swift 3示例代码:scrollView.addConstraint(NSLayoutConstraint(item: scrollView, attribute: .width, relatedBy: .equal, toItem: contentView, attribute: .width, multiplier: 1, constant: 0.0))。逻辑是,通过设置这个约束,您可以防止scrollView在水平方向上溢出任何内容,从而使其成为一个仅垂直滚动的scrollView。相反,您可以在该代码片段中将两个width属性替换为height,以创建一个仅水平滚动的scrollView。 - Jamie Birch
太荒谬了,你需要一个容器来装你的容器,但这确实解决了我的问题,谢谢! - Chris Allinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接