【问题标题】:How to stop interface builder resetting user constraints on UIScrollView?如何停止界面构建器重置 UIScrollView 上的用户约束?
【发布时间】:2013-06-30 04:13:18
【问题描述】:

我无法获得 UIScrollView 以尊重我在界面生成器中设置的约束。

我需要做的就是在 IB 中设置滚动视图的内容大小。

UIScrollView 包含一个 UIView

UIScrollView 上的约束:

UIView 上的约束:

我已经阅读了the documentation,因此设置如下:

  • UIScrollView 具有将其固定到其父视图的约束,从而从外部定义其大小
  • UIView(内容)具有固定大小(通过宽度和高度限制)
  • UIView 固定到UIScrollView,从而定义内容大小

但是,IB 不允许我输入这些限制条件。如果我将视图和滚动视图之间的“底部空间”约束(在图像中显示为 -2196)更改为 0(从而固定滚动视图的下边缘),那么“顶部空间”约束将重置为非-零值。反过来也一样。 (我还没有在 Xcode 5 中尝试过,它对无效约束有一种更明智的方法,因为它不会在你喜欢的时候就把你的约束扔掉。)

我错过了什么?

【问题讨论】:

    标签: xcode uiscrollview interface-builder autolayout


    【解决方案1】:

    每次我尝试在 Xcode 4 的 Interface Builder 中使用约束做一些稍微复杂的事情时,我最终都放弃了,要么在代码中编写约束,要么切换回 springs'n'struts 和 layoutSubviews (通常在 Xcode 几次崩溃之后)。

    也就是说,还有另一种方法可以在 IB 中布置带有内容的滚动视图。只需使滚动视图与其内容大小一样大,并依靠视图控制器(或某些包含视图控制器)来调整滚动视图(或其父视图)的大小,并让约束在运行时缩小滚动视图的框架。窗口的根视图控制器将始终将其视图的框架设置为屏幕大小,无论其在 nib 或情节提要中的大小如何,并且调整大小会沿视图层次结构向下流动。

    我更详细地描述了这种方法in this answer

    如果您的滚动视图的内容大小真的应该是 2196 磅高,那么这可能不会很好。在这种情况下,我没有更好的建议。

    【讨论】:

    • 我完全同意你的看法。 Xcode 4 试图在 100% 的时间内强制执行约束的方式(而不是允许在编译之前修复的破坏性更改)是真正的问题。例如,我只是尝试将大小限制添加到UIScrollView,然后将其删除......并且允许该配置(与我最初尝试的配置相同)>
    • 是的,这就是你在 Xcode 4 中必须做的,过度约束然后删除,否则 Xcode 会通过添加随机约束来对抗你,因为如果某些东西受到约束,它将失去它是我的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多