用于iPhone和iPad的布局静态表格单元格

时间:2013-05-18 00:05:13

标签: ios uitableview autolayout

我是iOS开发人员的新手,也是故事板的新手。我正在尝试使用带有静态单元格的UITableView创建一个基本表单,并且"分组"风格。

我希望只制作一个故事板,并将其用于iPhone和iPad,不确定是否推荐这个但是我真的没有并且设计了特定于任何一个设备的元素,所以&# 39;如果我为两个设备系列维护一个单独的故事板,那么这将是很多重复。

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

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

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

  1. 复制iPhone和iPad的故事板
  2. 使用QuickDialog
  3. 等表单库
  4. 以编程方式添加和排列标签和文本字段
  5. 还有其他建议吗?
  6. 这是显示自动布局约束的屏幕截图: enter image description here

    这就是布局在iPad上的表现: enter image description here

2 个答案:

答案 0 :(得分:3)

我有同样的问题。我通过为每个水平约束创建出口然后以编程方式更改常量来解决它,具体取决于当前设备是iPad还是iPhone。

头文件:

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

viewDidLoad子例程中的方法文件:

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

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

我希望有一个更通用的解决方案,例如Storyboard中的某个设置或单个resize命令。 iPad静态单元组布局似乎比iPhone缩小了约30个点,但在自动布局中没有对此进行补偿。也许我错过了某个地方。

答案 1 :(得分:1)

我优先选择解决方案3 ^^使用cellForRow:atIndexPath:方法,并使用cell.titleLabel.title作为标签,并添加UITextField autoResizingMask(或类似){{1}到你的flexibleWidth

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