1

我对 iOS 开发相当陌生,对故事板也很陌生。我正在尝试使用带有静态单元格和“分组”样式的 UITableView 创建一个基本表单。

我希望只制作一个故事板并将其用于 iPhone 和 iPad,不确定是否建议这样做,但我并没有设计特定于任何一种设备的元素,所以如果有很多重复的话我为两个设备系列维护了一个单独的故事板。

所以我将标签拖到表格单元格的左侧,将文本输入拖到右侧,然后我使用自动布局并设置一些约束: - 标签的前导空间到超级视图 30 - 文本字段的尾随空间到超级视图30 - 标签和文本字段之间的水平间距约束 - 标签上的固定宽度约束

它在 iPhone 上运行良好,但在 iPad 上,标签和文本字段超出了表格单元格的边缘。这是因为 iPad 在表格单元格的左侧和右侧有更宽的边距(比我使用的 30pt 约束更宽)。

很明显为什么它不起作用。我想我的问题是,这是一种常见的情况,我怀疑有一个简单的解决方案。有兴趣听取建议。有没有办法将标签和文本字段限制在单元格的边缘而不是表格的边缘?如果不是,我应该:

  1. 复制 iPhone 和 iPad 的故事板
  2. 使用 QuickDialog 之类的表单库
  3. 以编程方式添加和排列标签和文本字段
  4. 还有其他建议吗?

这是显示自动布局约束的屏幕截图: 在此处输入图像描述

这就是布局在 iPad 上的行为方式: 在此处输入图像描述

4

2 回答 2

3

我也有同样的问题。我通过为每个水平约束创建插座然后根据当前设备是 iPad 还是 iPhone 以编程方式更改常量来解决这个问题。

头文件:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myLabelHorizontalConstraint;

viewDidLoad 子程序中的方法文件:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        myLabelHorizontalConstraint.constant = 60;
} else myLabelHorizontalConstraint.constant = 30;

如果情节提要场景布局中的约束设置为 30(在我的情况下是 iPhone 设置),则可以省略“其他”部分。我只是把它放在上面是为了展示一个完整的例子。

我希望有一个更通用的解决方案,例如故事板中某处的设置或单个调整大小命令。似乎 iPad 静态单元组布局比 iPhone 多缩进 30 点,但在自动布局中并没有弥补这一点。也许我在某个地方遗漏了一些东西。

于 2013-05-19T03:10:07.297 回答
1

我更喜欢解决方案 3 ^^ 使用cellForRow:atIndexPath:方法和那里的cell.titleLabel.title标签并将UITextFieldwith autoResizingMask(或类似)添加flexibleWidth到您的cell.contentView.

或其他解决方案:为 iPhone 和 iPad 创建一个自定义 Cell 并加载此 ^^,这样您在处理文本字段时也会遇到较小的问题:P 如果您需要进一步的帮助或有疑问,请发表评论 :)

于 2013-05-18T00:58:53.730 回答