我在CustomView
中添加UITableViewCell.contentView
,将自定义视图的autoresize mask
设置为W+H
。
但在运行时,CustomView
的高度高于ContentView
,ContentView
的高度为60pt
(与{{1}中的设置相同}}),但UITableViewDelegate
内CustomView
的高度为contentView
。
通过76pt
,我在自定义视图中看到了一些奇怪的限制,它们是:
Xcode6's view debugging
这些约束来自何处以及如何修改它们?我从来没有设置任何值为8或16的东西。
更新
我做了一个测试项目,它只是故事板中的一个tableview,从nib文件中加载了self.height = superview.height + 16
self.midY = superview.midY + 8
,这个测试项目在运行时复制了问题,CustomView
是CustomView
的子视图的高度变得比TableViewCell.contentView
更高。
测试项目在这里: https://drive.google.com/file/d/0B5y_NrRbhGlSb1dlbVZNb19vNjQ/view?usp=sharing
答案 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]];