Interface Builder不断重置自定义UITableViewCell的宽度

时间:2013-01-17 09:12:17

标签: objective-c xcode ipad interface-builder

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

我有一个专用的XIB文件,它有一个UITableViewCell作为其根视图。我能够将UITableViewCell的宽度更改为1024(在XCode的右侧属性窗格中的“大小”检查器中),并且此操作会暂时调整画布上的单元格大小。

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

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

任何人都知道如何设置宽度以使其永久或者如何指定UITableViewCell是否特定于iPad?


重新创建......

  • 文件>新>文件...
  • UserInterface>空
  • 设备系列== iPad

  • 将新的UITableViewCell拖到画布上(尽管先前选择了iPad,但其宽度为320)

  • 将UITableViewCell的宽度调整为1024(到目前为止一切都很好)
  • 将UILabel拖放到UITableViewCell的左侧(仍然很好)
  • 通过拖动角落以任何方式调整UILabel的大小(不要使用属性检查器) - AND ... UITableViewCell的大小重置为320

编辑:

我刚收到苹果公司对我很久以前创建的雷达车票的以下回应......

Hello Oliver,

  

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

     

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

     

我们认为此问题已在最新的Xcode 5.1 Seed中得到解决。

     

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

     

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

我还试图在Xcode 5.0.2中重新创建问题,看起来它也与该版本一起修复了。

4 个答案:

答案 0 :(得分:6)

我不知道您是否认为这是一个有效的答案,但是当我在IB中使用 autolayout 时,似乎只出现了这个问题。如果我关闭它,Xcode调整UITableViewCell大小的问题就消失了。

要关闭自动布局,只需选择UITableViewCell,然后在“文件检查器”的右侧,有一个 autolayout 复选框可将其关闭。< / p>

答案 1 :(得分: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"]`

答案 2 :(得分:1)

我刚做了一个测试,没有问题调整细胞大小。如果使用'for iPhone'或'for iPad'选项创建Xib,它确实没有任何区别。所以,这可以按预期工作。

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

答案 3 :(得分:0)

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

我只是在试验并发现在TextEdit中打开xib文件并更改宽度&amp; tableViewCell和tableViewCellContentView的高度实际上将保留所有自动布局,并更新单元格的大小。几乎没有限制因素。常量值现在已经过时,可以通过使用&#34;更新约束来轻松修复&#34;关于这些限制。

enter image description here