嵌入在程序化UIView中的自动布局XIB没有调整到父级

dev*_*os1 11 objective-c uiview ios autolayout

我有一个xib文件,表示我正在实例化的自动布局的简单视图,[[NSBundle mainBundle] loadNibNamed:@"name"][0]并添加到以编程方式创建的UIViewvia addSubview:.

问题是视图没有拉伸以满足嵌入视图的大小; 相反,它似乎默认为xib文件中指定的大小.(我也找不到任何方法在xib文件中设置容器视图本身的约束,只有它的子视图.)

同样奇怪的是,当我旋转iPad时,视图的宽度会进一步缩小.所以它显然以某种方式接线,但错误的初始值.

我缺少什么连接才能使此嵌入视图正确适合视图层次结构?

截图(为调试添加的洋红色着色):

截图1

旋转到肖像后:

截图2

Ken*_*ses 18

它没有调整自己以填补其新的超级视图的原因是你没有安排它来做它.简而言之,您需要在代码中添加约束,以便在将两个视图添加到另一个视图之后关联它们.

最有可能的是,IB将视图设置为将其自动调整掩码转换为约束.当NIB设置为使用自动布局时,很难确定其自动调整掩码的内容.

无论如何,当您将其添加到superview时,自动生成的约束将保持其当前帧.当superview调整大小时,它们会根据自动调整大小调整大小(可能允许宽度和高度变化,但不能改变到超视图边缘的距离).

当您使用自动布局时,您应该执行以下操作:

  • 或者关闭translatesAutoresizingMaskIntoConstraints在NIB 在其中将其添加到上海华代码将其关闭.您采用哪种方法取决于您是否预期视图将作为管理其子视图布局的框架视图类的子视图添加.如果你愿意,那么你应该把它留在NIB中,让那个班级决定是否关掉它.

  • 将视图添加到其超级视图后,向超级视图添加约束,以控制视图的布局位置.

  • 谢谢您的帮助.太糟糕了Xcode不允许在界面构建器中为此设置约束.通常我喜欢在代码中做事,但自动布局绝对不是其中之一.;)我最终安装了**PureLayout**库(https://github.com/smileyborg/PureLayout),其"autoPinEdgesToSuperviewEdgesWithInsets"方法运行良好.干杯! (6认同)
  • 别客气.约束涉及两个视图.在视图NIB中,超级视图不存在,因此没有任何与约束相关的内容.此外,必须将约束添加到超级视图,而不是添加到NIB中的视图.最后,视图NIB的一个重要用例是用于可以在各种上下文中使用的视图.这种观点不适合决定它在任意环境中如何与其周围环境相关联.这是控制器的一项工作,它加载它并将其添加到另一个视图层次结构中. (3认同)