IOS界面视图 - 最佳实践

时间:2014-01-13 14:02:16

标签: ios xcode view frame bounds

我现在正在为包含IB元素和程序化创建元素的游戏的复杂用户界面工作。我的问题是关于创建界面时要使用的最佳实践:我知道我应该避免对视图帧的硬编码值,但是如果我让应用程序计算屏幕大小之后的帧,结果不是好,我希望。

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

    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)];

在创建界面时,有哪些经验丰富的开发人员使用?我应该读一篇好文章吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我尽可能尝试将代码中的位置绑定到IB中设置的位置。

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

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

另外,考虑使用嵌套视图+自动调整来控制布局而不是代码。例如,如果您需要将内容分成两列,则可以将主视图划分为两个透明视图,每个视图都自动调整以适应屏幕的一半,然后将内容放入其中。通过嵌套这样的透明视图,您可以创建或多或少的任何类型的网格,而无需借助代码。

最后,对于顶部对齐的UILabel或需要根据内容调整自身大小的视图等问题,请考虑创建“智能”视图子类,相对于其兄弟节点自动调整大小或重新定位自身。例如,您可以使用“StackLabel”通过调用[self sizetoFit]自动设置自己的高度,然后将其自身定位在它在superview中找到的上一个标签下方。使用智能视图可以避免在控制器中放置重复的布局代码。

(或者你当然可以咬紧牙关学习AutoLayout。)