iPhone AutoLayout视图控制器的根视图无法固定

时间:2014-03-05 16:34:18

标签: ios uiviewcontroller autolayout xib

将视图控制器类与XIB一起使用。可以使用除顶视图/根视图之外的所有视图进行自动布局。不能Pin等。这个视图将用于另一个XIB等。

如何在视图控制器类的根视图的根视图中允许/设置自动布局引脚?

视图设置为自由格式/纵向/无/无/一个/缩放以填充

1 个答案:

答案 0 :(得分:7)

xib文件中的视图控制器(更具体地说,在这种情况下,视图控制器的视图)只是视图层次结构的自包含表示。在nib的特定实例中,根视图控制器的视图在此时不具有超级视图的概念,直到它在应用程序中的特定点(当它作为子视图添加时)加载到应用程序中。通常,视图控制器视图的大小可以通过以下几种方式之一指定(使用自动布局):

  1. 通过让视图的内容决定它的具体大小。基本上,内容将决定视图控制器视图的大小(或小)。为此,请将视图控制器视图中的每个子视图约束为视图控制器视图的完全定义。针对它的父视图的子视图所需的约束强制父视图符合子视图。

    可视化的一个好方法是让视图包含单个UILabel子视图。如果您将标签约束为具有所需的5pt边距,则容器视图将根据文本内容的增长而变大。 将此选项视为使您的子视图约束成为视图控制器大小的“主”约束。

    此方法的唯一缺点是视图控制器视图的超级视图将无法再控制此视图的大小。在尝试将约束附加到此类视图时,您更有可能遇到“过度约束”状态(“无法满足约束”异常),尤其是在存在更多“必需”约束的情况下。

  2. 视图控制器视图的超视图将在其自己的坐标系中指定视图控制器视图的大小和位置。您的视图控制器视图中的子视图现在必须足够灵活,以响应父视图的动态大小,除非您知道有关此视图的大小的假设。

    将此选项视为使视图控制器视图的大小成为子视图约束的“主”,因为子视图的约束必须更能容忍大小更改。

  3. 故事板

    如果您使用的是故事板,则可以将对象库中的“容器视图”添加到视图控制器的视图中,并向容器视图添加约束。如果您使用裸xib,则无法在nib文件中向裸视图控制器的视图添加约束,因为它还没有超级视图的概念。在这种情况下,您必须在视图中的代码中设置约束,这些约束将管理您的新视图控制器的视图(或使用故事板处理所有内容)。据我所知,你不能在故事板中使用预先构建的xib。

    Child View Controller in Storyboard