我有一个xib文件表示一个自动布局的简单视图,我使用[[NSBundle mainBundle] loadNibNamed:@“name”] [0]实例化,并通过addSubview添加到以编程方式创建的UIView:.
问题在于,视图没有伸缩以满足其嵌入的视图的大小;而是似乎默认为xib文件中指定的大小. (我也找不到任何办法在xib文件中的容器视图本身设置约束,只有其子视图.)
还有一点奇怪的是,当我旋转iPad时,视图的宽度进一步缩小.所以它显然是以某种方式连线,但错误的初始值.
我错过了什么连接来让这个嵌入视图适合视图层次结构?
截图(添加品红色调试):
旋转到肖像后:
解决方法
它没有调整自己以填补新的超级视图的原因是你没有安排这样做.简而言之,您需要在代码中添加约束,将两个视图添加到另一个视图中.
IB最有可能设置将自动调整掩码转换为约束的视图.当它被设置为使用自动布局时,它的自动调整掩码可能很难从NIB确定.
无论如何,当您将其添加到超级视图中时,自动生成的约束将保持其当前帧.当超级视图调整大小时,它们会根据自动调整掩码来调整大小(可能允许宽度和高度变化,但不会超过与超级视图边缘的距离).
当您使用自动布局时,您应该执行以下操作:
>关闭在NIB中转换自动归档MaskIntoConstraints或将其添加到超级视图的代码中.您采用哪种方法取决于您是否期望视图将作为子视图来添加,该视图可以管理其子视图布局的框架视图类.如果可能的话,那么你应该把它留在NIB中,让该类决定是否关闭它.>将视图添加到其超级视图后,添加约束到超级视图,控制视图应在哪里布局.