我使用带有多个标签的stactView创建了一个tableview单元格,以便它们可以自动调整标签的动态内容。它在tableview中完美地工作。
但现在我需要在动态内容的视图中使用相同的单元格。我打电话的细胞就像
NSArray * arr =[[NSBundle mainBundle] loadNibNamed:@"StaticCalloutView" owner:nil options:nil];
StaticCalloutView * staticView = [arr firstObject];
staticView.imageView.image = [UIImage imageNamed:@"permit-pin.png"];
staticView.lblTitle.text = (NSString *) [feature attributeForKey:ATTRIBUTE_DESCRIPTION];
staticView.lblDesc.text = (NSString *) [feature attributeForKey:ATTRIBUTE_LOCATION];
但这里的问题是它在这种情况下没有调整自身的大小。对于tableview我使用AutomaticDimension但在这种情况下我应该使用什么,以便我正在调用的视图将扩展或压缩到数据传递到标签。 ??
我在调试时注意到的一件事是当我删除最顶层stackView的底部约束时,然后stackview使用内容调整自身,但是它显示的视图没有。
您需要在StaticCalloutView
类中覆盖intrinsicContentSize
变量,此变量允许视图根据您使用的内容或任何条件自动调整大小,有一些UIControls默认情况下实现此方法UILabel
和UIButton
是两个示例
这是内在的contentSize实现的一个例子,请注意,这个CustomAutoresizableView
将根据arrayOfValues
中的项目数量乘以40的高度增长
class CustomAutoresizableView: UIView {
var arrayOfValues : [Int] = []{
willSet
{
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize
{
get
{
return CGSize(width: self.frame.width, height: CGFloat(self.arrayOfValues.count * 40))
}
}
}
对于除填充对齐之外的所有对齐,堆栈视图在计算垂直于堆栈轴的大小时使用每个已排列视图的内在内容大小属性
它不扩展的原因是标签宽度的模糊性。 UILabel需要知道宽度才能在多行中正确布局。检查并尝试这些选项
numberOfLines
属性设置为0。lineBreak
属性设置为WordWrap