我在 UITableViewCell.contentView
中放置了一个 CustomView
,将自定义 View 的 autoresize mask
设置为 W+H
.
但是在运行时,CustomView
的高度比ContentView
高,ContentView
是60pt
高度(与UITableViewDelegate
中的设置相同),但contentView
中的CustomView
高度为76pt
。
通过 Xcode6 的 View 调试
,我在自定义 View 上看到了一些奇怪的约束,它们是:
self.height = superview.height + 16
self.midY = superview.midY + 8
这些约束从何而来,如何修改?我从未将任何值设置为 8 或 16。
更新:
我做了一个测试项目,它只是 Storyboard中的一个 TableView ,带有从 nib 文件加载的 CustomView
,这个测试项目在运行时复制了这个问题,CustomView
是 TableViewCell.contentView
的 subview ,其高度比 TableViewCell.contentView
大。
测试项目在这里: https://drive.google.com/file/d/0B5y_NrRbhGlSb1dlbVZNb19vNjQ/view?usp=sharing
最佳答案
终于明白了,自动布局只能在同一个xib或storyboard中形成关系,我的CustomView在一个独立的xib中,运行时加载,所以super view和CustomView之间没有任何自动布局约束.
如果我将 translatesAutoresizingMaskIntoConstraints
设置为 YES,那么问题就来了,我仍然不知道为什么使用 W+H 作为自动调整大小掩码会使 CustomView 比它的 super View (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]];
关于iOS 8 : UITableViewCell. contentView 不调整其中的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294328/