18

我正在使用 Interface Builder为 iPad 应用程序设计自定义 UITableViewCell 。

我有一个专用的 XIB 文件,它有一个 UITableViewCell 作为它的根视图。我可以将 UITableViewCell 的宽度更改为 1024(在 XCode 右侧属性窗格的大小检查器中),这会临时调整画布上单元格的大小。

但是,如果之后我尝试在 UITableViewCell 中移动/调整某些项目的大小或关闭并重新打开 XIB,XCode 决定将 UITableViewCell 的宽度重置回 320(iPhone 特定宽度)。

然后,画布上的单元格会遮盖单元格内的项目,除非我再次调整单元格的大小,否则无法设计单元格。一旦你绕过这个循环几次,它就会变得相当烦人。

任何人都知道我可以如何设置宽度使其永久或一些如何指定 UITableViewCell 是 iPad 特定的?


要重新创建...

  • 文件 > 新建 > 文件...
  • 用户界面 > 空
  • 设备系列 == iPad

  • 将一个新的 UITableViewCell 拖到画布上(尽管之前选择了 iPad,但它创建的宽度为 320)

  • 将 UITableViewCell 的宽度调整为 1024(到目前为止一切正常)
  • 将一个 UILabel 拖放到 UITableViewCell 的左侧(还是不错的)
  • 通过拖动角以任何方式调整 UILabel 的大小(不要使用属性检查器) - 并且... UITableViewCell 的大小重置回 320

编辑:

我刚刚收到 Apple 对我多年前创建的 Radar 票证的以下回复......

你好奥利弗,

这是关于 Bug ID# 13222753 的后续行动。

为了进一步调查此问题,工程部要求提供以下信息:

我们相信这个问题已经在最新的 Xcode 5.1 Seed 中得到解决。

这是适用于 Mac、iPhone 和 iPad 的 Xcode 开发人员工具集的预发布版本。它包括 Xcode IDE、iOS 模拟器以及构建 OS X 和 iOS 应用程序所需的所有工具和框架。请使用此版本进行测试,并使用结果更新您的错误报告。

Xcode 5.1 Seed - Build 5B71f 发布日期:2013 年 12 月 13 日

我也刚刚尝试在 Xcode 5.0.2 中重新创建该问题,并且看起来它也已通过该构建修复。

4

4 回答 4

6

我不知道您是否认为这是一个有效的答案,但是当我在 IB中使用自动布局时,问题似乎只发生在我身上。如果我关闭它,Xcode 调整 UITableViewCell 大小的问题就会消失。

要关闭自动布局,只需选择 UITableViewCell,然后在“文件检查器”的右侧,有一个用于自动布局的复选框其关闭。

于 2013-03-12T03:53:41.177 回答
5

解决方法是不要将表格视图单元格添加到您的笔尖。相反,使用常规视图来包含您的子视图。

创建一个自定义 UITableViewCell 类,该类加载 nib 并将顶级 nib 视图设置为单元格内容视图的子视图:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        UINib *nib = [UINib nibWithNibName:@"YourNibName" bundle:nil];
        UIView* containerView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
        containerView.translatesAutoresizingMaskIntoConstraints = NO
        [self.contentView addSubview:containerView];

        NSDictionary *views = NSDictionaryOfVariableBindings(containerView);
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[containerView]|" options:0 metrics:nil views:views]];
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|" options:0 metrics:nil views:views]];
    }

    return self;
}

使用表格视图注册您的课程:

[tableView registerClass:YourCellClass forCellReuseIdentifier:@"YourCellID"]`
于 2013-04-19T04:50:57.677 回答
1

我刚刚做了一个测试,调整单元格大小没有问题。如果 Xib 是使用“for iPhone”或“for iPad”选项创建的,这并没有什么区别。因此,这按预期工作。

诀窍是,不要拖动大小,而是使用 Inspector 更改宽度 - 这使单元格的大小为 1024。

于 2013-01-31T21:34:40.527 回答
0

我确认Edward Huynh 的回答是正确的。同时,我无法关闭自动布局、更改高度、再次将自动布局转回来。这将要求我为内容视图的每个子视图重做所有自动布局设置。

我只是在试验,发现在 TextEdit 中打开 xib 文件并更改 tableViewCell 和 tableViewCellContentView 的宽度和高度实际上会保留所有自动布局并且单元格的大小会更新。现在很少有约束的常量值会过时,可以通过对此类约束使用“更新约束”轻松修复。

在此处输入图像描述

于 2016-03-10T14:02:41.767 回答