我在iOS 8.X和iOS7.x中遇到了自动布局和UITableView表头(tableHeaderView)的问题。
self.HeaderView
是使用自动布局构建的XIB。它在一个滚动视图内部使用,其后面跟随其他视图,结果正确。
然后,我将其设置为表视图的表头(如这里所述):
self.tableView.tableHeaderView = self.HeaderView;
[self.HeaderView setNeedsLayout];
[self.HeaderView layoutIfNeeded];
CGSize headerViewSize = [self.HeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGRect frame = self.HeaderView.frame;
frame.size.height = headerViewSize.height;
self.HeaderView.frame = frame;
self.tableView.tableHeaderView = self.HeaderView;
但是结果的高度比预期的要大。我不知道为什么。约束似乎没有问题,否则为什么在滚动视图中结果是正确的?
如果在IB中调整容器框架的高度,则约束将被更新而不会有任何歧义。
为什么
UILayoutFittingCompressedSize
不能压缩视图?#更新
我发现了问题。基本上约束是正确的。
在layoutSubviews被调用后,UIImageView的大小被正确地调整了。宽度和高度与预期相同。 问题在于
systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
的工作方式。它不是使用UIImageView大小(已经被正确调整)计算大小,而是使用UIImage的大小(源文件更大)
那么,我该怎么做才能强制
systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
使用UIImageView大小来计算大小?