设计iPhone App布局灵活是否重要?

时间:2009-05-12 13:48:35

标签: iphone cocoa-touch uikit

我想知道在使用固定值设置neb中我的视图的高度时是否会遇到麻烦。

示例:状态栏的高度已知。这是20个单位。因此,当制作一个显示一个漂亮界面的视图时,当用户在使用App时接听电话时会发生什么,并且状态栏的高度会增加?或者,如果Apple将来某天改变状态栏或标签栏的高度会怎么样?

您是否始终对容器视图使用自动调整功能,其中包含所有界面元素?你的模式是什么?

6 个答案:

答案 0 :(得分:7)

我会避开状态栏,工具栏等高度的硬编码值到您的程序中。您提供了一些很好的示例,说明这些值是如何动态的,并且可以在将来发生变化。您可能支持或不支持的另一个常见方案是用户将iPhone旋转到横向方向的能力。

我总是尝试以保持容器子视图的布局灵活。使用自动调整功能是一种很好的方法。你的问题很好,我想它会让我回顾一下我自己的布局策略!

答案 1 :(得分:4)

我总是使用灵活的布局自动调整大小,因为这样可以让我专注于设计并让计算机算出数学。

[编辑]我的理由是事情会发生变化,在这种情况下我不想再做数学。可以改变的事情:

  • 用户可能会选择更大的字体
  • 下一代设备获得更大的屏幕
  • 翻译人员在必须将文字放入像素密集的空间时讨厌它
  • 加载项可能占用屏幕上的几个像素
  • 操作系统的更改可能会将屏幕尺寸更改几个像素
  • 当我使用预定义图标时,它们的大小可能会改变
  • 最终,在灵活的应用程序中,用户可以选择她想要看到的内容。我不希望她必须布局UI。

因此,如果您将布局设为静态,您最终必须再次执行此操作。然后再次。直到你了解到软件开发中唯一不变的是变化。

答案 2 :(得分:3)

好吧,我在这里走出困境,但我认为硬编码布局尺寸(今天在iPhone上,以像素为单位)的想法理论上会让你陷入困境(或至少制作未来的额外工作。

我不太关心他们改变状态栏的表观大小,或默认标签栏或导航栏......我担心单位会发生变化。我不是注册的OS X开发人员,但长期以来一直有传言说Snow Leopard将支持一种独立于分辨率的方式来指定接口,而不是基于像素。

这不会发生在明天,或者在3.0,甚至可能在明年,但这种独立于分辨率的界面的想法将会转向iPhone,特别是随着显示尺寸(更具体地说,显示分辨率)的变化在将来。

我啰嗦,但这不是状态栏的大小我关注未来的变化,它是设备的大小,以及我们用来指定Cocoa Touch尺寸的单位。

答案 3 :(得分:1)

要考虑的一件事:如果用户接到电话,然后在通话期间启动应用程序,状态栏的高度将会改变。因此,在系统UI元素的高度避免硬编码肯定是必要的。

答案 4 :(得分:1)

在UICatalog示例中有一个“constants.h”,但它是该样本的本地,显然只是样本开发人员让他/她的生活更轻松的一种方式。它带有上面提到的所有问题......如果将来“标准尺寸”有任何改变,这个样本就会停止正常工作。

很难查询其他对象以使您的展示位置正确,但这是您在环境发生变化时确保正常工作的方式。不断扩大的“通话中”状态栏就是一个很好的例子。如果您硬编码20“单位”以避开状态栏,则您的应用会在通话中断开。并且,这是你在模拟器中不太可能注意到的事情(因为,如果你想到它在模拟器中尝试该选项,你可能会在编写应用程序时考虑过它!)

答案 5 :(得分:0)

Apple提供的文件“Constants.h”中是否存在大部分这些大小? (我刚才注意到它是UICatalog SDK示例的一部分。)

我认为Apple很可能会在某个时间推出另一款设备,它有更大或更小的屏幕。所以它们应该与[UIScreen frame / bounds];

一起使用
// these are the various screen placement constants used across all the UIViewControllers

// padding for margins
#define kLeftMargin             20.0
#define kTopMargin              20.0
#define kRightMargin            20.0
#define kBottomMargin           20.0
#define kTweenMargin            10.0

// control dimensions
#define kStdButtonWidth        106.0
#define kStdButtonHeight        40.0
#define kSegmentedControlHeight 40.0
#define kPageControlHeight      20.0
#define kPageControlWidth      160.0
#define kSliderHeight            7.0
#define kSwitchButtonWidth      94.0
#define kSwitchButtonHeight     27.0
#define kTextFieldHeight        30.0
#define kSearchBarHeight        40.0
#define kLabelHeight            20.0
#define kProgressIndicatorSize  40.0
#define kToolbarHeight          40.0
#define kUIProgressBarWidth    160.0
#define kUIProgressBarHeight    24.0

// specific font metrics used in our text fields and text views
#define kFontName               @"Arial"
#define kTextFieldFontSize      18.0
#define kTextViewFontSize       18.0

// UITableView row heights
#define kUIRowHeight            50.0
#define kUIRowLabelHeight       22.0

// table view cell content offsets

#define kCellLeftOffset          8.0
#define kCellTopOffset          12.0