iOS 8 : UITableViewCell. contentView 不调整其中的 subview

标签 ios iphone ios8 autolayout

我在 UITableViewCell.contentView 中放置了一个 CustomView,将自定义 View 的 autoresize mask 设置为 W+H.

但是在运行时,CustomView的高度比ContentView高,ContentView60pt高度(与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/

相关文章:

ios - Swift中UICollectionView如何提高获取照片缩略图并显示的效率

ios - 如何在后台插入新项目时在核心数据中分页?

ios - 我们可以在iOS中部分隐藏UIView吗

ios - initImageAppleJPEG : falling back to libJPEG warning messages mean? 是什么

ios - 我怎么知道iBeacons的纬度(X)和经度(Y)位置

iphone - 实现 NSFetchedResultsSectionInfo

ios - 使用 block 将数据传回 View Controller

javascript - HTML anchor 标记在其他地方按预期工作时无法在 iPhone 上打开页面

iphone - 如何在 UILabel 中画一个圆圈?

ios - 长按链接时的 UIWebView 自定义 UIActionSheet 菜单