【问题标题】:iOS Layout - Whats the best solution?iOS 布局 - 最好的解决方案是什么?
【发布时间】:2015-07-01 17:58:50
【问题描述】:

对于我目前正在开发的 iOS 应用,我需要根据运行该应用的设备类型来管理屏幕上显示的控件。

我将尝试用一个理论例子来解释(下面使用的实际数字并不重要,我感兴趣的是达到预期结果的最佳方法)。

例子:

对于屏幕截图中的应用程序,与 UIImageView 重叠的按钮根本不应该显示或显示在屏幕上的其他位置。

到目前为止,我一直在使用自动布局,但是,据我所知,没有办法对 xcode 说类似的内容:嘿,对于班级大小“紧凑宽度/紧凑高度”,我希望你隐藏这些按钮...但将它们显示为“常规宽度/紧凑高度”。

我也做了一些谷歌搜索,看到一些人谈论使用基于设备的不同故事板;我也在想,我可以根据设备类型动态添加/删除按钮,但我认为必须手动添加所有约束(即以编程方式)并不是那么愉快。

所以要恢复,我会很感激提出“最佳”方法的建议,最好的意思是“不那么难”+“不那么长”的组合。此外,一些代码示例(或链接)将不胜感激。

提前谢谢大家!

【问题讨论】:

  • 如果按钮要与图像视图重叠,为什么不直接缩小按钮?
  • 这是一个想法,但如果我有超过 1 个按钮重叠,我认为它不会很好。也许我没有通过希望按钮具有固定大小来使用最佳实践。
  • 你可以对 Xcode 说hey, for a class size "Compact Width / Compact Height" , I want you to hide these buttons...but show them for "Regular Width / Compact Height"。在 Size Class 中,您可以使用 Attributes Inspector 中的 installed 复选框选择是否显示界面对象。这是你想要的?我是否误解了您的要求?
  • 你说得对,我完全没有注意到 Installed 复选框附近的小“+”号。但是在测试您的答案时,我意识到实际上“最小”尺寸类别包括 3 个屏幕尺寸,但这仍然不能完全解决我的问题。但是不要误会我的意思,你的回答非常有帮助(至少对我来说)——如果我不想以编程方式处理自动布局,最后我可能会坚持使用这个和其他东西的组合。
  • 如果你需要我的建议(你可能不需要),我会尽量坚持使用大小类和自动布局。如果需要更多定制,则使用代码调整对象和约束。一旦您为每台设备使用一个 Storyboard 并尝试区分设备屏幕的物理尺寸,您就在与框架作斗争,并为维护该代码打开了一个痛苦的世界。

标签: ios autolayout xcode-storyboard


【解决方案1】:

我认为这完全取决于它对您所做的整体工作的复杂程度。当您查看大型应用程序项目的开发人员代码时,实际上很少在界面构建器中完成,因为应用程序是如此动态,它在 IB 中的工作量太大了。

使用多个故事板“听起来”是个好主意,但通常并非如此。如果您想更新/更改一个,在大多数情况下,您还必须更改其他的。

我认为很方便的:

使用一个故事板(或多个,但用于应用程序的不同部分,而不是并行的部分),然后在非常“特殊”的情况下将同一类的多个不同大小的 ViewController 放入单个故事板中。这样你就不会忘记更新第二个(和第三个),因为它们都在那里。

我只会为支持 iPhone 和 iPad 的应用程序使用多个“并行”情节提要,将它们真正分开是有意义的..

还有:

我会尽可能只使用一种表示,并从代码中派生出其他“版本”。如果您构建了一个结构化的用户界面,那么您可以重用(或只是继承)在下一个中“隐藏”第一个 viewController 的部分的代码。这样您的代码和 IB 文件就不会变得杂乱无章。

还要考虑国际化(如果这是您未来计划的一部分),因为多个 IB 文档和同一 viewController 布局的多个实例确实无济于事;)

【讨论】:

  • 您能否详细说明这部分:“使用一个故事板(或多个,但用于应用程序的不同部分,而不是并行部分),然后在非常“特殊”的情况下放入同一类的多个 ViewController不同大小的故事板。这样你就不会忘记更新第二个(和第三个),因为它们都在那里。 - 也许是因为我累了,但我不太明白你建议的过程。
  • 我试图这样说:如果第一个故事板的 ViewController 太多,我只会拆分故事板。为了解决您的问题,如果您想为同一屏幕但大小不同的 iOS 设备提供两种不同的布局描述,我通常会将它们放入同一个情节提要中,只是使用不同的标识符。这样,如果您更改会影响两者的东西,它们都在那里。但是:我只会走这条路,如果这种情况不会发生在每一个视图上,而只是发生在一些有巨大差异的视图上。
  • 当您谈论“不同的标识符”时,您指的是视图(如主容器)或按钮(或其他 UI 元素)?基本上,我只需要这个“主”视图,因为所有其他视图都可以使用自动布局和大小类来处理。
  • 我说的是storyboard中viewController的'identifier'字段
猜你喜欢
  • 1970-01-01
  • 2018-01-29
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2021-01-01
  • 2011-10-08
相关资源
最近更新 更多