我的应用在tableView和mapView中显示商家信息。在tableView中,我测量填充业务名称标签的文本的大小,并在自定义heightForRowAt函数中为较长的名称适当调整单元格高度。效果很好:
在我的mapView中,这并没有那么好用,因为你可以看到价格和开/关标签正在被切断:
我复制相同的代码以确定单元格的高度。在这种情况下," cell"是主要的水平stackView,它有一个嵌入式图像stackView和info stackView(与tableView中相同)。我的print语句表明水平stackView的高度根据需要增加,但是它将内容向下推,而不是向上增加水平stackView。 stackView固定在superview的右侧,左侧和底部,因此从理论上说不应该发生。
此代码设置我的horizontalStackView高度:
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
}
我错过了什么?