【问题标题】:iPhone 6 and iPhone 6 plus width issueiPhone 6 和 iPhone 6 plus 宽度问题
【发布时间】:2015-02-02 05:39:50
【问题描述】:

现在我正在尝试使我的应用程序与 iPhone 6/6+ 兼容。问题是,我有一排水平对齐的 4 个按钮。它们每个的宽度是 80 点(在情节提要中设置)。 iPhone4/5/5s 没问题。现在,当我在 iPhone 6/6+ 上模拟应用程序时,您可以看到第三个和第四个按钮之间有 2 个像素的空间。我没有使用自动布局。我知道 iPhone 6 plus 的宽度是:1242 x 2208px。问题是1242不能被4整除。

问题是当我使用以下代码时:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGFloat screenScale = [[UIScreen mainScreen] scale];
CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
CGFloat screenWidth = screenSize.width;

实际上screenWidth 是640。

有人知道如何解决这个问题吗?非常感谢。

【问题讨论】:

    标签: ios objective-c storyboard iphone-6


    【解决方案1】:

    您应该以点而不是像素为单位工作,因此 iPhone 6 Plus 的宽度(在纵向模式下)为 414,而 iPhone 6 为 375。

    在这种情况下分割屏幕时,即在数学计算不准确的情况下,您需要确保最小的空间是相等的(所以在这种情况下是分隔线),并让大的区域稍微不同的尺寸(相差一个点等)。这是因为(通常)眼睛能够注意到 1 点和 2 点之间的差异,但不会注意到 102 点和 103 点之间的差异。

    您可能希望考虑使用自动布局设置此视图,而不是自己进行数学计算。这就是它的用途。

    关于变量screenWidth640 的第二点,请确保您的应用未处于兼容模式。如果是,则返回维度的 6 和 6+ 就好像它们是 5 一样,这将解释 640 数字。添加LaunchScreen.xib 以确保您的应用程序以真正的屏幕分辨率运行,而不是缩放。见这里:How to enable native resolution for apps on iPhone 6 and 6 Plus?

    【讨论】:

    • 感谢@Dave Wood 的回复。我不想使用自动布局的问题是故事板中有大约 30 个屏幕。一旦我设置了一个 ViewController 自动布局,情节提要中的所有 ViewController 都将自动设置为自动布局。他们的布局会混乱。我真的想要一个快速修复,稍后将故事板更改为自动布局。有没有办法只将一个 ViewController 设置为自动布局,而其他的保持原来的设置?
    • 您应该能够只选择一个视图并将其更改为“使用自动布局”(在 IB 视图的文件检查器中)。它应该只影响它的子视图。一次只将它用于一个视图(甚至不是整个视图控制器)来学习是很棒的。
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2023-03-07
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多