使用nib“loadNibNamed”时,单元格不会调整自身大小

问题描述 投票:0回答:2

我使用带有多个标签的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但在这种情况下我应该使用什么,以便我正在调用的视图将扩展或压缩到数据传递到标签。 ??

constraints View

我在调试时注意到的一件事是当我删除最顶层stackView的底部约束时,然后stackview使用内容调整自身,但是它显示的视图没有。

ios objective-c uitableview custom-view
2个回答
0
投票

您需要在StaticCalloutView类中覆盖intrinsicContentSize变量,此变量允许视图根据您使用的内容或任何条件自动调整大小,有一些UIControls默认情况下实现此方法UILabelUIButton是两个示例

这是内在的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))
        }
    }

}

0
投票

Apple documentation

对于除填充对齐之外的所有对齐,堆栈视图在计算垂直于堆栈轴的大小时使用每个已排列视图的内在内容大小属性

它不扩展的原因是标签宽度的模糊性。 UILabel需要知道宽度才能在多行中正确布局。检查并尝试这些选项

  1. 将UILabel的numberOfLines属性设置为0。
  2. lineBreak属性设置为WordWrap
  3. 设置详细信息标签的宽度约束或包含标签的视图。
© www.soinside.com 2019 - 2024. All rights reserved.