【问题标题】:dynamic height of custom view with Autolayout具有自动布局的自定义视图的动态高度
【发布时间】:2015-09-17 04:34:30
【问题描述】:

其实我正在谷歌地图中实现一个自定义信息窗口, 我用这行添加它:

    //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 布局设置如下: 自动布局部分:

如果文本变长,我希望信息窗口的高度会增加。 我已经尝试了很多约束的优先级,但 UILabel 的高度无法更改。

我错过了什么?

2015-07-02 编辑

在尝试了很多优先级和抗压缩性之后,标签会调整大小,而不是超级视图

【问题讨论】:

  • 您是否尝试为标签设置所需的垂直压缩阻力?也不需要对齐中心 Y,因为您已经有顶部和底部约束
  • 为此您需要计算标签文本的大小,根据计算出的大小,您需要更改 customView 的框架,然后在您的 customView 上调用 layoutIfNeeded,就是这样。
  • @HitendraHckr,我不会通过编程来做到这一点,我认为如果我设置正确,自动布局会处理它。它适用于单元格的高度。
  • @Sega-Zero,我没有尝试过,一旦我尝试过,我会编辑问题。
  • 尝试移除高度约束并将行数设置为零

标签: ios swift autolayout


【解决方案1】:

将您的 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,这就是为什么我要问如何使用自动布局来做到这一点。
猜你喜欢
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2021-05-10
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多