2014-01-13 56 views
2

我现在正在一个包含IB元素和编程创建元素的游戏的复杂用户界面上工作。我的问题是关于创建界面时使用的最佳实践:我知道我应该避免为视图的框架硬编码值,但是如果我让应用程序计算屏幕尺寸后的帧,结果不是好像我希望的那样。IOS界面视图 - 最佳实践

我现在用的硬编码和自主计算的组合:

backQuestion = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 760, 400)]; 
    backQuestion.center = CGPointMake(self.view.bounds.size.height/2, self.view.bounds.size.width/2); 
    questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(backQuestion.frame.origin.x+backQuestion.frame.size.width*0.05, backQuestion.frame.origin.y+backQuestion.frame.size.width*0.02, backQuestion.frame.size.width*0.9, backQuestion.frame.size.height*0.35)]; 

什么是创建接口时,使用更有经验的开发者?有没有我应该阅读的好文章?

回答

0

我经常可以使用Interface Builder来构建接口。这使我可以绘制界面并查看各种尺寸和方向的潜在问题。它还使我能够快速设计自动布局属性。虽然这可以在代码中完成,但它非常耗时,并且会创建不太干的代码。

0

只要有可能,我尝试将代码中的位置绑定到IB中设置的位置。

例如,仅仅因为某个元素需要以编程方式调整大小,并不意味着您无法从IB派生它的初始位置,然后在代码中应用相对偏移量。

您也可以在IB中添加纯粹用于间隔目的的隐藏视图(隐藏视图几乎没有运行时间开销)。然后您可以在viewDidLoad中访问它们并存储它们的位置以用于布局计算。

此外,请考虑使用嵌套视图+自动调整来控制布局,而不是代码。例如,如果您需要将内容分成两列,则可以将主视图划分为两个透明视图,每个视图都会自动调整大小以适应一半屏幕,然后将您的内容放入其中。通过像这样嵌套透明视图,您可以创建更多或更少的任何类型的网格,而无需使用代码。最后,对于像顶部对齐的UILabels或视图需要根据其内容调整自己大小的问题,考虑创建“智能”视图子类,以相对于其兄弟自动调整或自动重新定位自己。例如,您可以通过调用[self sizetoFit]来自动设置自己的高度,然后将自己定位到在其超级视图中找到的之前标签下方的“StackLabel”。使用智能视图可以避免在控制器中放置重复的布局代码。

(或者你可以硬着头皮学习AutoLayout当然。)