【问题标题】:iOS : Adaptative view size programmatically depending on iphone modeliOS:根据 iphone 型号以编程方式自适应视图大小
【发布时间】:2015-05-04 09:18:03
【问题描述】:

我正在以编程方式创建视图,它们像甲板一样堆叠在一起。我希望它们具有与屏幕尺寸相关的特定尺寸。

我如何调整每个视图的框架以使其布局均匀并适应主屏幕尺寸(例如 iPhone 4)或任何其他 iPhone 屏幕尺寸?

现在,我有这段代码:

var frame = CGRectMake(0, 0, 300, 435)
switch [iphone model] {
  case [iphone4]:
    frame.size.height = frame.size.height * [sizeFactor]
    frame.size.width = frame.size.width * [sizeFactor]
  case [iphone5]:
    [...]
}

谢谢

【问题讨论】:

  • 嗯,原则上你已经正确回答了自己。具体是什么问题?
  • 我自己回答了?我不认为我已经弄清楚如何确定有关 iphone 型号的 sizeFactor 以及如何为 iphone 型号打开参考值
  • 好的,那么问题应该问“如何以编程方式检测 ios 设备型号?”。因为显然您了解 switch 并且知道如何分配新帧。对吗?
  • 不,问题是我问的,或者如果您更喜欢:“如何使视图框架的大小根据设备的屏幕大小而变化”。在 IB 中,您有自动布局约束,但是当您必须以像素为单位设置特定大小时,当您以编程方式创建视图时如何做到这一点?我以 switch 为例,但我想应该有一些东西,比如 IB 中的自动布局,而不是通过 if/switch 来做到这一点

标签: ios iphone swift layout autolayout


【解决方案1】:

你必须手动实现你的布局机制。

如果父视图使用

自动布局

1) 生成您的视图

2) 生成约束(对于您需要的每个视图 - 宽度、高度、边距......或一些更高级的“大小相等”约束),这些约束将从辅助方法中获取实际的常量属性值。

3) 辅助方法将根据屏幕比例和可见视图数量计算特定的高度、宽度或任何其他常数。

4) 对视图应用约束


SPRINGS & STRUTS(布局视图的旧方法)

1) 生成您的视图

2) 为它们计算框架 ...对于框架成员值,使用来自辅助方法的动态计算值

3) 实现将使用屏幕大小的辅助方法..与自动布局相同 3)

4) 为所有视图设置正确的自动调整大小掩码。

【讨论】:

  • 好的,我在 IB 中使用自动布局。所以当你说生成约束时,我必须使用一些 NSLayoutConstraint 来应用到我的主视图,对吧?
  • 没有。在 4) 我是说适用于视图。复数:)...您想限制您的视图..您不想玩全屏的viewcontroller的根视图..对吗?因此,您需要将这些约束应用于生成的视图。..
  • 好的。我希望苹果能提供更容易管理的不同屏幕尺寸的东西。那我试试,谢谢。
【解决方案2】:

您可以使用它在运行时获取窗口大小:

CGRect windowRect = [[UIScreen mainScreen] bounds];

【讨论】:

  • 当然,我知道如何获取窗口大小,甚至是带有 UIDevice 的 iphone 模型,但我想让我的框架根据他的原始大小自动调整,可能是由框架或苹果为这种需求提供的其他东西,但我找不到类似的东西。
  • 我不明白你的意思......每个 iphone 型号都会给你窗口大小,所以你可以根据它来布局你的子视图。甚至更好......使用自动布局来布局您的视图。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多