ios - 为 iPhone 和 iPad 布局静态表格单元格

标签 ios uitableview autolayout

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

我希望只制作一个 Storyboard并将其用于 iPhone 和 iPad,不确定这是否被推荐,但我并没有真正拥有和设计特定于任一设备的元素,所以如果有很多重复的话我为两个设备系列维护了一个单独的 Storyboard。

因此,我将标签拖到表格单元格的左侧,将文本输入拖到右侧,然后使用自动布局并设置一些约束:
- 标签有一个领先的空间来superview 30
- TextField 有一个到 superview 的尾随空格 30
- 标签和文本字段之间的水平间距约束
- 修复了标签的宽度限制

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

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

  • 复制 iPhone 和 iPad 的 Storyboard
  • 使用 QuickDialog 之类的表单库
  • 以编程方式添加和排列标签和文本字段
  • 还有其他建议吗?

  • 这是显示自动布局约束的屏幕截图:
    enter image description here

    这就是布局在 iPad 上的行为方式:
    enter image description here

    最佳答案

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

    头文件:

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

    viewDidLoad 子程序中的方法文件:
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            myLabelHorizontalConstraint.constant = 60;
    } else myLabelHorizontalConstraint.constant = 30;
    

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

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

    关于ios - 为 iPhone 和 iPad 布局静态表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619435/

    相关文章:

    ios - 如何将基于 Storyboard的 Header 和 CustomTableCell 添加到 “Search Bar and Search Display Controller”

    ios - UINavigation Controller 到 UITabbarcontroller 问题与 iOS Swift 中的 SWRevealViewController

    ios - 我们需要在 cellForRowAt 上做 crash App 吗?

    ios - 具有固定大小 View 和自动调整大小 TableView 的自动布局

    iphone - iOS 应用程序 sqlite3 上的离线缓存损坏

    ios - 对包括导航栏和选项卡栏的 View 进行快照

    ios - 将 ObjC block 转换为 Swift 闭包

    iphone - 我想在 UIAlertView 上显示 UIProgressView

    ios - 表格单元格自动布局的问题没有按照我想要的方式间隔

    ios - 无法创建 3 列 UICollectionView