iOS 8:UITableViewCell.contentView不会调整其中的子视图大小

时间:2014-12-04 12:38:43

标签: ios iphone ios8 autolayout

我在CustomView中添加UITableViewCell.contentView,将自定义视图的autoresize mask设置为W+H

但在运行时,CustomView的高度高于ContentViewContentView的高度为60pt(与{{1}中的设置相同}}),但UITableViewDelegateCustomView的高度为contentView

通过76pt,我在自定义视图中看到了一些奇怪的限制,它们是:

Xcode6's view debugging

这些约束来自何处以及如何修改它们?我从来没有设置任何值为8或16的东西。

更新

我做了一个测试项目,它只是故事板中的一个tableview,从nib文件中加载了self.height = superview.height + 16 self.midY = superview.midY + 8 ,这个测试项目在运行时复制了问题,CustomViewCustomView的子视图的高度变得比TableViewCell.contentView更高。

测试项目在这里: https://drive.google.com/file/d/0B5y_NrRbhGlSb1dlbVZNb19vNjQ/view?usp=sharing

1 个答案:

答案 0 :(得分:2)

最后我明白,自动布局只能在同一个xib或storyboard中形成关系,我的CustomView在一个单独的xib中并在运行时加载,因此超级视图和CustomView之间没有任何自动布局约束

如果我将translatesAutoresizingMaskIntoConstraints设置为YES,那么就会出现问题,我仍然不知道为什么使用W + H作为自动调整大小掩码使CustomView比其超级视图(cell.contentView)更高,但是我找到了解决办法:

我在superview和CustomView之间手动添加约束,并关闭customView. translatesAutoresizingMaskIntoConstraints,代码在那里:

    customView.translatesAutoresizingMaskIntoConstraints = NO;

    NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:customView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0];
    NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:customView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
    NSLayoutConstraint *left = [NSLayoutConstraint constraintWithItem:customView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeLeft multiplier:1 constant:0];
    NSLayoutConstraint *right = [NSLayoutConstraint constraintWithItem:customView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:cell.contentView attribute:NSLayoutAttributeRight multiplier:1 constant:0];

    [cell.contentView addConstraints:@[top, bottom, left, right]];