【问题标题】:IOS interface views - best practices [closed]IOS界面视图-最佳实践[关闭]
【发布时间】:2014-01-13 14:02:16
【问题描述】:

我现在正在为一个包含 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)];

更有经验的开发人员在创建接口时使用什么?有什么好文章值得一看吗?

【问题讨论】:

    标签: ios xcode view frame bounds


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      只要有可能,我都会尝试将代码中的位置与 IB 中设置的位置联系起来。

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

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

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

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

      (当然,你也可以硬着头皮学习 AutoLayout。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2013-08-03
        • 2014-10-16
        相关资源
        最近更新 更多