我很难围绕框架属性(高度,宽度,posX,posY)在视图控制器和故事板(界面构建器)中设置它们的工作方式。
例如,让我说我有一个UICollectionView
对象,我将其设置为宽度为400,高度为800.然后,在我的代码中,我设置了同一个对象的框架到600 x 400.我还没有真正找到一致的行为。我尝试在viewDidLayoutSubviews
中设置框架并且类似工作 - 但它似乎“跳跃”#39;在它和故事板上设置的内容之间来回。
基本上我的问题是,故事板上的属性何时更改UI对象?我假设我只需要知道,然后在View Controller中重置它们。或者,有没有办法将高度和宽度设置为空,以便我可以在代码中完成所有操作?
对此的任何见解都会非常有用!
答案 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中,您可以使用viewDidLoad
或viewDidAppear
来设置对象的大小属性。
首次创建该视图时,将调用viewDidLoad
。每次视图返回到屏幕时,都会调用viewDidAppear
(就像您要使用导航控制器一样)。