iOS 8 AutoLayout中的ScrollView在iPhone 6 Plus上水平滚动

5

我有一个针对iOS的应用程序,在将所有UI调整为自动布局和大小类以支持新的iPhone 6和iPhone 6 Plus时,我遇到了一个奇怪的问题... 所有滚动视图在iPhone 4s、5、5s和6上工作正常... 在iPhone 6 Plus上,它们不仅垂直滚动而且水平滚动... 就像滚动视图的内容大小比视图本身多几个像素(因此它会水平移动几个像素然后反弹)。 我不理解为什么会发生这种情况...

1个回答

11

我终于找到了一个正确的方法让它工作... 我是这样做的:

视图层次结构:
- UIView (主视图) - UIScrollView (我希望与主视图大小完全相同的滚动视图) - UIView (容器视图,包含所有要在滚动视图中显示的内容)

约束条件:

容器视图:
- 宽度等于主视图的宽度 - 左、右、上、下边距均为0(即与其父视图——滚动视图的间距)

UIScrollView:
- 宽度等于主视图的宽度
- 在X轴水平方向上居中视图(即X轴中心点)
- 上下边距均为0(即与其父视图相对)


1
这对我没有用。我也不明白为什么上面的方法会起作用,因为内容视图控制UIScrollView,但你设置了UIScrollView的宽度。 - kgaidis
2
我猜我的问题是由于滚动视图与其父视图之间的前导和尾随空间的-16约束引起的,如果我说我希望滚动视图与窗口大小相同(不是相同的宽度...如果我拖动滚动视图的边框以匹配窗口的边框,则默认情况下Interface Builder会添加它)。将约束放在滚动视图的宽度上,并通过X轴居中,为我提供了一组一致的约束,使滚动视图看起来符合我的要求。 - Freedom
@kgaidis - iOS做出了一些奇怪的事情,以使scrollview与自动布局相结合:Apple技术笔记UIScrollView和自动布局 另一种选择是在布局完成后直接在代码中设置UIScrollView.contentSize。根据技术笔记,内部内容的约束不会产生您想要的效果-它们不决定滚动区域的大小。 - ToolmakerSteve

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