【发布时间】:2014-09-30 04:40:17
【问题描述】:
我正在创建一个带有两个 UILabel 的表头视图。约束如下所示: 顶部的 UILabel 连接到容器的顶部、前缘和后缘。底部 UILabel 的前缘和后缘与顶部标签对齐,底部边缘与容器底部对齐。两个 UILabel 之间还有一个垂直间距约束。当然,所有视图 translatesAutoresizingMaskIntoConstraints 都已设置为 NO。顺便说一句,整个事情都是用代码制作的。
我通过获取每个标签和填充的固有内容大小来计算 UIView 的高度,以便我可以创建容器视图的矩形并将其添加到 UITableView。像这样:
-(float)calculateHeightwithMaxWidth:(float)maxWidth
{
float totalHeight = 0;
const float containerPadding = 30;
const float maxHeight = 1000;
maxWidth = maxWidth - containerPadding;
UIFont *nameFont = [UIFont fontWithName:@"AvenirNext-Regular" size:18];
UIFont *descriptionFont = [UIFont fontWithName:@"AvenirNext-Regular" size:13];
CGSize nameSize = [_productNameLabel.text gsSizeWithFont:nameFont
withMaximumSize:CGSizeMake(maxWidth, maxHeight)];
CGSize descriptionSize = [_productDescriptionLabel.text gsSizeWithFont:descriptionFont
withMaximumSize:CGSizeMake(maxWidth, maxHeight)];
totalHeight = nameSize.height + descriptionSize.height + containerPadding;
return totalHeight;
}
此代码在 iOS 7 中完美运行,并且已在多个版本中运行。现在我在 iOS 8 中进行测试,我遇到了一个不令人满意的约束条件的崩溃。如果我在调用 layoutIfNeeded 之前看到视图的约束,一切看起来都很好,但在调用它之后,我看到了两个新的约束,它们是容器视图的宽度和高度约束。我从来没有创建过这个约束,在 iOS 7 中也不需要。
即使我自己创建了这些约束来解决这个问题,我在试图打破它们时也会遇到更多错误。我错过了什么吗? iOS 8 中约束的逻辑是否发生了变化?
谢谢!
【问题讨论】:
标签: objective-c constraints autolayout ios8 xcode6