Interface Builder keeps resetting the width of my custom UITableViewCell

I'm using Interface Builder to design a custom UITableViewCell for an iPad application .

I have a dedicated XIB file which has a UITableViewCell as its root view. I am able to change the width of the UITableViewCell to 1024 (in the Size inspector on the right properties pane of XCode) and this DOES resize the cell on the canvas temporarily.

However if afterwards I try to move/resize certain items within the UITableViewCell or close and reopen the XIB, XCode decides to reset the UITableViewCell's width back to 320 (the iPhone specific width).

The cell on the canvas then obscures the items within the cell and makes designing the cell impossible unless I resize the cell again. Once you've gone round this loop a few times it gets rather annoying.

Anyone know how I might set the width so its permanent or some how specify that the UITableViewCell is iPad specific?


To recreate...

  • File > New > File...
  • UserInterface > Empty
  • Device Family == iPad

  • Drag a new UITableViewCell onto the canvas (its created with a width of 320 despite selecting iPad previously)

  • Resize the UITableViewCell's width to 1024 (all good so far)
  • Drag and drop a UILabel onto the left side of the UITableViewCell (still good)
  • Resize the UILabel in any way by dragging a corner (DO NOT USE THE ATTRIBUTES INSPECTOR) - AND... The UITableViewCell's size is reset back to 320

  • EDIT:

    I have just received the following response from Apple to the Radar ticket I created ages ago...

    Hello Oliver,

    This is a follow-up regarding regarding Bug ID# 13222753.

    Engineering has requested the following information in order to further investigate this issue:

    We believe this issue has been addressed in the latest Xcode 5.1 Seed.

    This is a pre-release version of the Xcode developer toolset for Mac, iPhone, and iPad. It includes the Xcode IDE, iOS Simulator, and all required tools and frameworks for building OS X and iOS apps. Please test with this release, and update your bug report with the results.

    Xcode 5.1 Seed - Build 5B71f Posted Date: Dec 13, 2013

    I've also just tried to recreate the problem in Xcode 5.0.2 and it looks like its fixed with that build also.


    I don't know if you consider this a valid answer, but the problem only seemed to occur for me when I was using autolayout in IB. If I turn that off, the problem of Xcode resizing the UITableViewCell goes away.

    To turn off autolayout , just select the UITableViewCell and then on the right in the 'File inspector', there is a checkbox for autolayout to turn it off.


    The workaround is to not add a Table View Cell to your nib. Instead, use a regular View to contain your subviews.

    Create a custom UITableViewCell class that loads the nib and sets the top-level nib view as the subview of the cell content view:

    - (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;
    }
    

    Register your class with the table view:

    [tableView registerClass:YourCellClass forCellReuseIdentifier:@"YourCellID"]`
    

    I just did a test and had no problems resizing the cell. It did make no difference, if the Xib was created with the 'for iPhone' or 'for iPad' option. So, this works as expected.

    The trick is, not to drag the size but, to use the Inspector to change the width - this leaves the cell at it's size of 1024.

    链接地址: http://www.djcxy.com/p/24408.html

    上一篇: Interface Builder网点管理

    下一篇: Interface Builder不断重新设置我的自定义UITableViewCell的宽度