embedded在程序化UIView中的自动布局XIB不会调整到父级
我有一个xib文件表示一个简单的视图与自动布局,我正在用[[NSBundle mainBundle] loadNibNamed:@"name"][0]
实例化,并通过addSubview:
添加到编程创build的UIView
addSubview:
问题在于视图不能伸展以符合embedded视图的大小; 相反,它似乎是默认的xib文件中指定的大小。 (我也找不到任何方法来设置容器视图本身在xib文件,只有其子视图的约束。)
另外有点奇怪,当我旋转iPad时,视图的宽度会进一步缩小比例。 所以很明显,它是以某种方式连接起来的,但是有了错误的初始值。
我错过了什么连接让这个embedded式视图正确地适合视图层次?
屏幕截图(为debugging添加洋红着色):
旋转到肖像后:
它没有调整自己来填补新的超级观点的原因是你没有安排它这样做。 简而言之,您需要在代码中添加约束,将两个视图之间的关联添加到另一个视图中。
最有可能的是,IB设置视图来将其自动调整掩码转换为约束。 当NIB设置为使用自动布局时,它的自动调整掩码很难确定。
无论如何,当你将它添加到超级视图,自动生成的约束保持其当前帧。 当超级视图resize时,它们根据自动调整屏蔽(可能允许宽度和高度变化,但不超过视图边缘的距离)调整它的大小。
当您使用自动布局时,您应该执行以下操作:
-
closuresNIB中的
translatesAutoresizingMaskIntoConstraints
或者在将代码添加到超级视图的代码中closures它。 您采取哪种方法取决于您是否预期将视图添加为pipe理子视图布局的框架视图类的子视图。 如果可能的话,那么你应该把它留在NIB,让这个class级决定是否closures它。 -
在将视图添加到其超级视图之后,向超级视图添加约束,以控制视图的布局位置。