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

Oli*_*ain 18 xcode objective-c interface-builder ipad

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

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

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

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

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


要重新创造......

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

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

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

编辑:

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

你好奥利弗,

这是关于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中重新创建问题,看起来它也与该版本一起修复了.

Edw*_*ynh 6

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

要关闭自动布局,只需选择UITableViewCell,然后在"文件检查器"的右侧,有一个自动布局的复选框可将其关闭.

  • 接受,这当然只是解决方案而不是解决方案.该视图将采用旧的弹簧/结构模型而不是使用新的iOS 6约束,这有点令人失望.我已经尝试取消选中"使用Autolayout"来调整大小,然后在完成后重新检查,但我之前设置的所有约束都丢失了.因此,如果你想使用它,你需要牺牲约束模型. (2认同)

pha*_*ann 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;
}
Run Code Online (Sandbox Code Playgroud)

使用表视图注册您的类:

[tableView registerClass:YourCellClass forCellReuseIdentifier:@"YourCellID"]`
Run Code Online (Sandbox Code Playgroud)