ios - iPhone 上的流畅 UI 布局

标签 ios user-interface interface-builder

我有一个 Android 应用程序,其 UI 与此类似,用于查看电子邮件:

Example Layout

我正在尝试将其移植到 iOS 并需要它与 iOS 5.0 及更高版本一起使用(因此不能在 iOS 6.0 中使用自动布局)。希望您能根据示例说明布局应如何调整/流动。

处理这种布局的最佳方式是什么? From 和 Re 线需要高度可变,如图所示(实际上 To: 线也是如此)。消息正文当然需要可变高度。

到目前为止,我唯一的尝试是尝试将 UITableViewController 与静态单元格一起使用。通过在 heightForRowAtIndexPath 中使用 sizeWithFont,我能够以这种方式获得可变高度,以返回每行所需的高度。使用这种方法,我花了很多时间尝试获得我想要的样式(圆角和背景仅适用于顶部)。

那么有没有更好的办法呢?也许是使用 Collection View 或 Container View 的东西?在我需要移植的其他一些屏幕上,我有类似的问题,但它们有更多层次的嵌套(圆形蓝色部分内有白色部分,圆形蓝色部分内有圆形蓝色部分)。还是我最好不使用 IB 并仅从基本标签元素和通用 View 在代码中构建整个 UI?

最佳答案

我能想到的最简单的方法是手动计算 viewDidLayoutSubviews 中的标签框架。这是一些伪代码:

关于创建:

  1. 在IB中,将所有标签作为蓝色区域的 subview 。检查容器的自动调整大小掩码是否粘在顶部、左侧和右侧,以及是否具有可拉伸(stretch)的宽度。我们将在代码中修复高度和 subview 框架。消息正文可以是标签或作为单独 View 的 TextView 。
  2. viewDidLoad中,根据需要设置包含 View 的图层cornerRadius、borderColor等。

viewDidLayoutSubviews中:

  1. 时间标签:简单。只需将宽度设置为父 View 宽度减去一些填充,使用 sizeWithFont:
  2. 设置高度
  3. For To:, From:, and Re:;调用 sizeToFit。获得最大宽度并坚持下去。
  4. To: 标签:将 x 设置为 0,将 y 设置为时间标签的底部。
  5. 接收者姓名标签:将 x 设置为您从 (2.) 获得的宽度,将 y 设置为与 (3.) 相同。使用 sizeWithFont: 将宽度设置为(容器宽度 - (2.))和高度。
  6. From:Re: 行执行从 (3.) 到 (4.) 的相同步骤。
  7. 将蓝色 View 高度设置为主题标签的框架底部。
  8. 用正文 TextView /标签填充框架的其余部分。

您必须自己添加填充,因为 sizeToFitsizeWithFont: 不会为您做这些。此外,正文 UITextView 可以自行滚动,但如果您希望主题标题很长,那么您应该将整个内容包装在另一个 UITextView 中(或者在 IB 中只需设置主视图的类 UIScrollView)

关于ios - iPhone 上的流畅 UI 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700007/

相关文章:

ios - 如何在 ios UITextfield 中显示完整的占位符文本?

user-interface - 声明式与编程式 UI(对象实例、XAML、MXML、XUL 等)

macos - Nib 的自定义类无法连接到类

ios - 不使用表情符号键盘调用 UIKeyboardWillChangeFrame 通知

objective-c - didEnterRegion 被多次触发

python - 检查字典内容后在 GUI 界面显示输出

user-interface - 使用 uigetfile 而不是 uigetdir 在 Matlab 中获取目录

Xcode 10,UI 元素在哪里?

iphone - UITableView 标题中的 iOS UIButton

ios - 我无法从自定义 UITableViewCell 中删除自定义 UIButton