使用自动布局实现自定义视图的动态高度

3
实际上,我正在Google地图中实现一个自定义信息窗口, 我使用以下代码添加它:
    //MARK: GMSMapViewDelegate
func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! {
    let infoView : SpMapInfoWindowView = SpMapInfoWindowView.loadFromNibNamed("SpMapInfoWindowView") as! SpMapInfoWindowView;
    infoView.lblLocationName.text = LONG_TEXT;
    return infoView;
}

我的xib布局设置如下: UI结构 自动布局部分: 标签的约束 我希望如果文本变长,信息窗口的高度也会增加。我尝试了很多约束优先级,但UILabel的高度没有改变。
我错过了什么?
编辑于2015-07-02
经过尝试很多优先级和压缩阻力,标签会重新调整大小,但是父视图不会。

你尝试过为标签设置所需的垂直压缩阻力吗?此外,居中对齐Y是不必要的,因为你已经有了顶部和底部的约束。 - Sega-Zero
你需要计算标签文本的大小,根据计算出的大小改变自定义视图的框架,然后在自定义视图上调用layoutIfNeeded方法,就完成了。 - Hitendra Solanki
@HitendraHckr,我不打算通过编程来完成它,如果我正确设置了自动布局,它应该可以处理。对于单元格的高度,它运行良好。 - Horst
@Sega-Zero,我还没有尝试过,等我试过后会编辑问题。 - Horst
尝试删除高度限制并将行数设置为零。 - Gaurav Patel
@GauravPatel,已经移除但没有帮助。numberOfLine不会影响结果,因为标签已经成功地按预期增长了。问题在于如何使父视图随之增长。感谢您的建议。 - Horst
1个回答

0

将您的uilabel的numberOfLines设置为0。(在IB中-“Lines”属性)

此外,尝试通过编程计算标签的高度。

label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text

label.sizeToFit()

然后将您的容器大小设置为 label.frame.height + your_margins

改变控件的高度仅仅为了确定其大小是一种非常糟糕的方式。更好的方法是使用 sizeThatFits: 或者 systemLayoutSizeFittingSize:。而且,没有必要通过编程来实现它,视图可以自动采用标签的高度,这就是自动布局的目的。 - Sega-Zero
我同意@Sega-Zero的观点,这就是为什么我正在询问如何使用自动布局来实现它。 - Horst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接