在一些場景我們需要自行計(jì)算高度的場景, 比如tableheaderview, 如果用約束布局, 那么用以下方法計(jì)算即可, view的細(xì)節(jié)跟動(dòng)態(tài)布局的cell和scrollview一樣, 約束必須明確每個(gè)view的高度并且距離邊界不能模糊
代碼
- (CGFloat)contentViewFittingSize:(UIView *)contentView {
// 獲得父容器的寬度鲤孵,我這里是獲取控制器View的寬度
CGFloat contentViewWidth = CGRectGetWidth(self.view.frame);
// 新建一個(gè)寬度約束
NSLayoutConstraint *widthFenceConstraint = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:contentViewWidth];
// 添加寬度約束
[contentView addConstraint:widthFenceConstraint];
// 獲取約束后的size
CGSize fittingSize = [contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
// 記得移除
[contentView removeConstraint:widthFenceConstraint];
return fittingSize.height;
}