Xcode Interface Builder高度/宽度设置与视图控制器

时间:2014-12-03 06:57:14

标签: ios xcode swift

我很难围绕框架属性(高度,宽度,posX,posY)在视图控制器和故事板(界面构建器)中设置它们的工作方式。

例如,让我说我有一个UICollectionView对象,我将其设置为宽度为400,高度为800.然后,在我的代码中,我设置了同一个对象的框架到600 x 400.我还没有真正找到一致的行为。我尝试在viewDidLayoutSubviews中设置框架并且类似工作 - 但它似乎“跳跃”#39;在它和故事板上设置的内容之间来回。

基本上我的问题是,故事板上的属性何时更改UI对象?我假设我只需要知道,然后在View Controller中重置它们。或者,有没有办法将高度和宽度设置为空,以便我可以在代码中完成所有操作?

对此的任何见解都会非常有用!

2 个答案:

答案 0 :(得分:3)

如果在项目中使用AutoLayout,则设置在storyboard中配置的视图对象的帧将不起作用。因为在设置帧后,AutoLayout将再次更新帧,这会使您设置的帧不起作用。如果您需要详细信息,可以查看以下文章:Advanced Auto Layout Tools但您可以设置以编程方式创建的视图对象框架以定位它们。

您可以检查故事板文件file inspector中是否已启用AutoLayout。但有一件事,如果你想使用AutoLayout,请确保不要将视图的translatesAutoresizingMaskIntoConstraints设置为NO。此属性的默认值为YES。如果使用AutoLayout,则此属性由storyboard为您设置,因为在storyboard中创建的约束足以布局视图。

修改

1)如果您没有使用AutoLayout,那么在代码中设置框架应该按预期工作。

2)是的,你可以,但有点棘手。您必须使用UICollectionView自己创建[[UICollectionView alloc] init]或从nib加载它。然后使用 xib 文件在IB中配置单元格。您可以使用AutoLayout在 xib 文件中布置单元格的子视图。并将单元格类注册到UICollectionView或自己从nib加载单元格对象。那么你应该计算每个单元格的大小,并让AutoLayout布局单元格的子视图。

虽然这比代码中的布局界面更容易,但它仍然有点复杂。更好的方法是使用AutoLayout。由于并非所有布局细节都可以在设计时完成,因为某些视图的帧可能因数据而异。您可以先使用AutoLayout制作basic版面,然后IBOutlet制作您想要动态配置的约束。并在以后更改约束对象的constant属性。这样,您可以100%控制布局过程,并让AutoLayout执行您不想自己做的脏作业。我建议你阅读AutoLayout的官方文档和其他有关它的好资源。学习曲线起初很陡峭,也可能让你想要自杀。但它非常强大且易于使用。一旦你弄明白AutoLayout如何工作,它将使你的iOS开发生活变得更加容易。

答案 1 :(得分:0)

如果您想通过代码设置内容的大小,可以尝试从故事板创建出口到View Controller。然后在View Controller中,您可以使用viewDidLoadviewDidAppear来设置对象的大小属性。 首次创建该视图时,将调用viewDidLoad。每次视图返回到屏幕时,都会调用viewDidAppear(就像您要使用导航控制器一样)。