【问题标题】:Use auto layout to develop UI for iphone4s through iPhone6s plus使用自动布局为 iphone 4s 到 iPhone 6s plus 开发 UI
【发布时间】:2016-06-05 16:34:10
【问题描述】:

我正在开发一个应用程序,它应该与从 iphone4s 到 iphone6s plus(以及 iOS8 及更高版本)的所有 iphone 设备兼容。我是一个新手,开始根据设计师的一些设计来开发 UI。

1) 当我开发屏幕时,我在尺寸类中使用 wAny 和 hAny 以及来自“Simulated Metrics 的“Inferred” " - 这是正确的吗?

2) 在一个屏幕中,我有 4 个图像,一个在另一个之下,并且我为每个图像 (imageView) 添加了约束,以保持每个设备的间距一致性。

一个。这样做,底部的第四张图片在 iphone4s 模拟器上根本不可见,因为它是 3.5"。第三张图片在其底部被裁剪。

b.当我在iphone 6s plus上模拟时,屏幕底部有很多空白区域。

如何调整图像以使其看起来不失真,但可以根据我正在渲染的设备自动调整大小?

我尝试了什么:-

  1. 为每个图像使用了顶部、左侧、右侧和底部的约束。
  2. 为每张图片使用了Aspect Fit。 (读到可以自动调整图像大小的地方)- 这种方法不起作用
  3. 使用 Equal Widths to SuperView 并将 Multiplier 指定为 0.5。 - 这也失败了

是否有任何我可以使用的响应式 UI 框架,例如 Bootstrap for Web?

【问题讨论】:

  • 您不应该使用宽高比限制和相等的宽度和高度限制。你应该打破任何一个。

标签: ios iphone autolayout xcode7 ios-autolayout


【解决方案1】:

尽管这最好由 UIStackView(iOS 9 及更高版本)甚至可能是 UITableView 处理,但仅使用约束也很容易实现。这是我做到的一种方法:

  1. 对父视图的 4 个视图中的每一个设置比例高度约束,为 0.2 的倍数

  2. 相对于 4 个视图中的每一个的超级视图约束设置“水平居中”

  3. 为 4 个视图中的每一个设置一个纵横比(我使用了 1.6 : 1 的比例)

  4. 现在,在每个视图的底部和父视图的底部(不是父视图边距)之间设置比例约束。因为视图高度加起来是父视图高度的 0.8,所以它们之间的间距应该是父视图高度的 0.2。

    因为总共有五个空格(一个到顶部,一个到底部,四个视图之间三个),每个空格应该是父视图高度的 0.04(0.2 / 5 = 0.04)。所以顶视图的底部应该是它的高度,加上相对于父视图的一个间距,或者是父视图底部边缘的 0.24。第二个视图的底部应该添加另一个空间和它自己的高度,即父视图底部边缘的 0.48 等。

因此,从上到下的每个视图的超级视图约束的底边到底边应该具有以下倍数:0.24、0.48。 0.72,0.96。

这为您提供相等的高度和相等的间距,加上一致的纵横比,所有这些都可以适应各种屏幕尺寸。以下是您定位的所有三种手机尺寸的此布局预览的屏幕截图:

最后,这是我为此解决方案创建的项目的链接,因此您可以更详细地查看约束:

http://d.pr/f/17Ae7

【讨论】:

  • 这对我有用....但我有一个问题,我也可以对标签按钮使用相同的按钮吗?如果是,我应该将它们添加到“视图”中并实施吗?实际上我确实开始添加标签,并且并排有两个按钮。对于这两个按钮,我很难对齐它们:(
  • @LohithKorupolu 一般来说,是的,标签和按钮可以使用相同的方法。不过,我不太明白您是如何尝试安排特定标签和按钮的。有截图吗?
  • 丹尼尔,我修好了。接受你的答案作为正确答案。有效!谢谢
【解决方案2】:

所有你需要做的就是给第一个UIImageView一个固定的宽度和高度(如果它是正方形,则等于宽度和高度)尝试纵横比,然后相对于第一个和第三个相对以此类推。

【讨论】:

  • 感谢您的回答,但当您说第二个相对于第一个时,我没有听懂您的意思?
  • 通过将第二个的宽度和高度分别设置为第一个的宽度和高度。必要时同样适用于其他约束
【解决方案3】:

最简单的方法是使用 UIStackView。您可以在情节提要中创建具有特定最小间距的垂直堆栈视图,然后添加要显示的所有四个视图。您只需在堆栈视图本身上设置约束。所有内部约束都将由堆栈视图响应地正确创建或修改。

这是一个很好的介绍:

https://developer.apple.com/videos/play/wwdc2015/218/

【讨论】:

  • @LohithKorupolu 啊,不,它没有。但是有第 3 方向后兼容库,例如:github.com/tomvanzummeren/TZStackView
  • @Lohith iOS 8 目前仅在大约 10% 的活动设备上运行,而 iOS 9+ 在 85% 上运行。到今年年底,iOS 8 可能会接近 5%。 developer.apple.com/support/app-store
  • 假设我不应该使用stackview,我该如何实现响应?
  • 重要的是,任何运行 iOS 8 的人都可以升级到 iOS 9。人们可能会假设任何拒绝从 iOS 8 迁移到 iOS 9 的人都不会下载很多新的应用程序。
  • @LohithKorupolu 我刚刚添加了一个单独的答案,其中包含有关如何在没有 UIStackView 的情况下直接将约束添加到视图的解决方案。上面的答案中还有一个屏幕截图和示例项目的链接。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
相关资源
最近更新 更多