当前位置: 首页 > 知识库问答 >
问题:

Xcode 6中故事板中的“限制边际”是什么

方风华
2023-03-14

我正在使用自动布局和约束,发现在Xcode 6中有一个约束到边距选项,该选项在Xcode 5中不存在,默认情况下处于选中状态。

我创建了一个测试项目,然后在ViewController上添加了一个UITableView,框架设置为与view相同的大小,并添加了约束

Xcode 6您可以在这里看到,尽管tableview的框架与视图相同,Xcode建议添加-16作为约束,而Xcode 5建议添加间距0。

现在,当您取消选中“约束到边距”选项时,它的行为与Xcode 5相同,建议添加0作为约束

此外,我发现一旦我添加了约束,约束到边距检查,我就不能再打开Xcode 5中的故事板文件,所以它肯定是Xcode 6中的新东西

希望我能恰当地解释我的问题。我想了解“限制边际”实际上是做什么的,以及我应该和不应该在什么时候使用它。如果是非常简单和明显的事情,我道歉。

编辑

我在这里的讨论中发现了一些关于布局边距的东西,我想知道它是否与此有关。

共有3个答案

左丘积厚
2023-03-14

UIView上的属性是:layoutMargins。查看苹果文档。基本上,如果布局边距是8,8,8,8(默认值),则容器边距的前导空间为0的约束将具有8的x位置。请注意,这仅适用于iOS8或更高版本。

对于不希望约束转到容器边距的每个人:

CTRL单击并拖动以显示约束创建弹出窗口。

如果菜单显示默认情况下创建边距约束,请按住选项/alt以允许对容器而不是容器边距进行约束。

现在,它将显示创建约束而不是边界的选项。这在我的使用上要快得多。

谷梁英资
2023-03-14

在iOS 8中,您现在可以选择定义相对于superview边界的预定义边距的约束,而不是superview边界本身。是的,它与您在文档中指出的布局页边距完全相关。一个优点是,您可以动态地重新定义页边距,或者为每种设备重新定义页边距,布局将相应地更新,而无需修改约束。

何时使用:当您想利用这种新的灵活性时。

何时不使用:适用于任何在iOS 7或更低版本上运行的应用程序

刘奇
2023-03-14

我完全不明白为什么人们抱怨“利润率会导致iOS 8之前的任何产品彻底崩溃。”

在xib文件或故事板中设置与边距相关的约束不会使应用程序在iOS7上崩溃,也不会在iOS7设备上造成UI差异,只要您不触摸代码中的UIView.layoutMarginsUIView.PreserveSPerViewLayoutMargins属性。

布局边距表示布局系统在布局子视图时可以使用的ui视图内部周围的填充,以确保视图边缘和子视图之间留有间隙。在这方面,它非常类似于CSS中与块关联的padding属性。

默认情况下,ui视图每侧有8个点的布局边距,在Interface Builder中无法更改。但是,通过设置代码中的UIView.layoutMargins属性(仅在iOS8上可用),您可以调整这些值。

页边距可用于帮助布局视图和子视图。默认情况下,每个UIView都带有页边距,但它们仅在设置与页边距相关的约束时影响视图的放置。

在Interface Builder中使用页边距的唯一方法是在配置约束时检查“相对于页边距”选项。这就是在布置视图时如何引导约束使用边距而不是边。

让我们来看看在视图和它的子视图之间建立四种不同约束的方法。对于每个约束,我们将回顾描述的第一个关联将是子视图的前导,第二个关联将是superview的前导。您需要密切注意的是每个约束endpoint的“相对于边距”选项的“选中”和“取消选中”状态,因为这定义了约束是绑定到视图的边距还是边缘。

  1. 第一项(取消勾选),第二项(勾选):在这种情况下,我们声明subview的左边缘应该与Superview的左边距对齐(如图所示)。

此新功能(iOS8)仅在您决定使用边距时才会影响UI开发。

通过使用边距,您可以通过更改单个特性的值来调整与共享超级视图共享公共关系的多个子视图的放置。这显然比使用固定值设置所有关联约束更有效,因为如果需要更新所有间距,而不是逐个更改每个值,则可以通过使用以下代码行更新superview的边距来同时修改所有相关放置:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

为了说明这个好处,在下面的例子中,所有子视图的左边缘都与它们的超级视图的左边距对齐。因此,更改Superview的左边距将同时影响所有子视图。

 类似资料:
  • 我被一个问题困住了,我在官方留档、Stackoverflow或谷歌上找不到答案。 我是一名经验丰富的iOS开发人员,但不熟悉故事板。我想在当前viewcontroller上实例化一个视图,在NIB中,我将在viewcontroller外部绘制一个视图,并附加一个出口以在代码中引用它,并调用addSubview:之类的东西。在MapView委托中绘制覆盖图或详图索引视图非常有用。但我不知道如何在故事

  • 我想在我的s中嵌入s,以实现iOS 7单元滑动模式(见Mail.app等)。 不幸的是,与自动布局一起使用非常烦人,所以我想我必须避免使用它。 对于将与使用自动布局的情节提要一起使用,我的最佳做法是什么?(我需要滚动视图来适应横向切换,这对于自动布局来说非常容易。)我仍然想使用故事板,并且需要定位滚动视图,但由于我不能只切换到一个视图的字符串和struts,并且自动布局已经过时,所以我被卡住了。

  • 我发现这个问题和另一个问题非常有趣,至少对我来说,它引出了几个问题: 这是一个相当开放的问题,局限于哪里?显然,GUI应用程序不适用于解决方案或IDE替换: 图形界面和调试器支持超出了范围。JShell API旨在允许在IDE和其他工具中使用JShell功能,但JShell工具并不打算成为IDE。 维恩图或其他视觉效果的加分。 当然,代码片段的大小应该受到限制。我更多的是问什么样的问题不能用片段来

  • 我已经通读了《iOS View Controller编程指南》和《iOS View编程指南》,如果代码或情节提要中没有大量复制,我无法找到执行以下操作的最佳方法。 我正在为我的孩子们编写一个简单的数学教程程序,其中有一个带有数字“NumberPad”(数字0-9)的视图,以及一些动画的场景。 到目前为止,我有一个视图控制器,它处理简单的加减乘除问题,工作良好。 我想为一个视图控制器使用相同的数字键

  • 我完全是以编程的方式在iOS中工作,也完全是使用IB,但我第一次尝试将两者混合使用,我感到困惑。我正在写一个标签应用程序。在我的应用程序委托中,我曾经有以下代码: 那很好。 然后,我通过IB中的故事板创建了一个视图控制器,并向其添加了一堆用户界面元素,给出了以下设置: 现在我的代码是: 应用程序可以正常启动,但当我按tab键进入设置屏幕时,会收到以下消息: 这意味着什么?我如何修复它? 编辑:这里

  • 问题内容: 我的应用程序的用户尝试使用我的应用程序将文件作为电子邮件附件发送。但是,这样做会引发以下异常,我无法解读 什么是“软私有内存限制”?有什么可能导致此异常? 问题答案: “软专用内存限制”是App Engine将停止实例接收任何更多请求,等待任何未完成的请求并终止该实例的内存限制。当您使用过多内存时,可以将其视为正常关机。 偶尔达到软限制是可以的,因为您的所有请求均已完成。但是,每次发生