【问题标题】:How to convert frame based on device screen size?如何根据设备屏幕尺寸转换帧?
【发布时间】:2016-06-26 19:11:06
【问题描述】:

我正在开发一个动态应用程序,在该应用程序中,我从 Web 服务中为视图中的每个 UI 对象分别获取 CGRect(x、y、宽度、高度)值。

在服务器上,他们将根据以下大小 (1080 x 1920) 设置帧,所以可以说,如果我得到一个具有以下值的 CGRect:(200, 20, 100, 100) 那么它应该是根据设备大小和服务器指定的大小适合设备。

  1. 所以对于 iPhone 5 的情况 - 新框架将是相同的 200、20、100、100。

  2. 那么对于 iPhone 6 (375 x 667) 的情况 - 新框架将是?

  3. 那么对于 iPhone 6+ (414 x 736) 的情况 - 新框架将是?

主要的是,无论应用程序接收到特定 UI 对象的帧,它都应该与管理面板中的边距完全一样。

请注意,

我只在 Storyboard 中使用 AutoLayout 设置 UI。

有什么建议吗?

这是一个例子:

示例 1:

|  _________________  |
| |                 | |
| |                 | |
| |                 | |
| |                 | |
| |_________________| |
|                     |

示例 2:

|          _________  |
|         |         | |
|         |         | |
|         |         | |
|         |         | |
|         |_________| |
|                     |

通过上面的例子,我试图解释,无论帧来自服务器,如果这在服务器上看起来像上面那样,类似的将在设备上,但它应该基于设备CGRect

【问题讨论】:

  • 你有固定的宽度和高度,100x100吗?
  • 这将由服务器管理员决定。我们计划提供一个屏幕(iPhone 5 屏幕预览),管理员可以在其中调整和调整任何对象的大小。
  • 基于尺寸的屏幕对象工作一目了然:- stackoverflow.com/questions/25892207/…
  • @mitulmarsonia 他指的是视图,而不是图像
  • @Hemang 那么当屏幕尺寸为1080x1920时,view的尺寸是多少?

标签: ios objective-c iphone autolayout constraints


【解决方案1】:

根据 iPhone 4s,5,6,6+ 的屏幕尺寸和比例更改帧。

在这里您需要按屏幕更改帧大小,因此这里有 “基于以下尺寸的帧 (1080 x 1920)” 这意味着您现在拥有 iPhone 6+ 帧,请参阅下面附加的图像集基于纵横比。

1)。 iPhone 5 框架 (200,20,100,100)
2)。 iPhone 6 框架 (200,20,155,155)
3)。 iPhone 6+ 框架 (200,20,194,194)


屏幕配给与屏幕分辨率。我收到来自This Website.

imgur.com/7zi1q.png

【讨论】:

  • 感谢 mitul 的回答,如何在代码中做到这一点?我只是非常好奇在我的应用程序中进行这种开发。
  • 这里只是下载这个演示并尝试理解。这个演示基于你的身高和基于纵横比。:-sendspace.com/file/09e7yo
  • 是的,我遇到了网络问题。刚下载了。现在检查。泰。
  • 有没有办法以编程方式完成。
  • 是的,您按照这种方式进行编程约束:- stackoverflow.com/questions/12826878/…
【解决方案2】:

您可以使用这两种方法获取 serverdevice 特定的CGRect

- (CGFloat) convertServerXorWidthValueToDeviceValueXorWidth:(CGFloat)sValue {
    CGFloat currentWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat value = ceilf((currentWidth * sValue) / 1080);
    return value;
}

- (CGFloat) convertServerYorHeightValueToDeviceValueYorHeight:(CGFloat)sValue {
    CGFloat currentHeight = [UIScreen mainScreen].bounds.size.height;
    CGFloat value = ceilf((currentHeight * sValue) / 1920);
    return value;
}

希望这会对你有所帮助。

【讨论】:

    【解决方案3】:

    我会说 iPhone 6 的框架是 (234, 23, 117, 117) 而 iPhone 6 Plus 是 (258, 25, 129, 129)。

    我是如何计算的? 新宽度=(旧宽度*新设备宽度)/旧设备宽度

    (100 * 375) / 320 = 117

    其他值也一样

    如果使用自动布局,您必须在收到新值后更新约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2019-04-27
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多