基于标签高度调整UIStackView的大小不会在视图中反映出来

时间:2018-02-21 03:25:45

标签: ios swift autolayout uistackview

我的应用在tableView和mapView中显示商家信息。在tableView中,我测量填充业务名称标签的文本的大小,并在自定义heightForRowAt函数中为较长的名称适当调整单元格高度。效果很好:

enter image description here

在我的mapView中,这并没有那么好用,因为你可以看到价格和开/关标签正在被切断:

mapView

我复制相同的代码以确定单元格的高度。在这种情况下," cell"是主要的水平stackView,它有一个嵌入式图像stackView和info stackView(与tableView中相同)。我的print语句表明水平stackView的高度根据需要增加,但是它将内容向下推,而不是向上增加水平stackView。 stackView固定在superview的右侧,左侧和底部,因此从理论上说不应该发生。

此代码设置我的horizo​​ntalStackView高度:

    func setStackViewHeight(heightForCellWithLocationName name: String) -> CGFloat {

    var size = CGSize()

    if let font = UIFont(name: ".SFUIText", size: 17.0) {
        let fontAttributes = [NSAttributedStringKey.font: font]
        size = (name as NSString).size(withAttributes: fontAttributes)
    }

    let normalCellHeight = CGFloat(96)
    let extraLargeCellHeight = CGFloat(normalCellHeight + 20.33)

    let textWidth = ceil(size.width)
    let labelWidth = ceil(nameLabel.frame.width)

    if textWidth > labelWidth {
        print("***********EXTRA LARGE CELL HEIGHT****************")
        return extraLargeCellHeight
    } else {
        print("***************NORMAL CELL HEIGHT*****************")
    return normalCellHeight
    }
}

我在我的函数中使用这段代码,用数据填充stackViews:

                horizontalStack.frame.size.height = setStackViewHeight(heightForCellWithLocationName: location.name)

            if horizontalStack.frame.height == 116.33 {
                infoStackView.frame.size.height += 20.33
            }

我错过了什么?

0 个答案:

没有答案