如何根据设备屏幕尺寸转换帧?

Hem*_*ang 5 iphone constraints objective-c ios autolayout

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

在服务器上,他们将根据以下尺寸(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:

|  _________________  |
| |                 | |
| |                 | |
| |                 | |
| |                 | |
| |_________________| |
|                     |
Run Code Online (Sandbox Code Playgroud)

例2:

|          _________  |
|         |         | |
|         |         | |
|         |         | |
|         |         | |
|         |_________| |
|                     |
Run Code Online (Sandbox Code Playgroud)

通过上面的例子,我试图解释一下,无论来自服务器的帧是什么,如果在服务器上看起来如此,类似的将在设备上,但它应该基于设备CGRect.

Hir*_*tel 1

您可以使用这两种方法来获取特定于服务器设备的信息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;
}
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。